mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
f4ff086abe
PROBLEMS Description:- Server variable "--lower_case_tables_names" when set to "0" on windows platform which does not support case sensitive file operations leads to problems. A warning message is printed in the error log while starting the server with "--lower_case_tables_names=0". Also according to the documentation, seting "lower_case_tables_names" to "0" on a case-insensitive filesystem might lead to index corruption. Analysis:- The problem reported in the bug is:- Creating an INNODB table 'a' and executing a query, "INSERT INTO a SELECT a FROM A;" on a server started with "--lower_case_tables_names=0" and running on a case-insensitive filesystem leads innodb to flat spin. Optimizer thinks that "a" and "A" are two different tables as the variable "lower_case_table_names" is set to "0". As a result, optimizer comes up with a plan which does not need a temporary table. If the same table is used in select and insert, a temporary table is needed. This incorrect optimizer plan leads to infinite insertions. Fix:- If the server is started with "--lower_case_tables_names" set to 0 on a case-insensitive filesystem, an error, "The server option 'lower_case_table_names'is configured to use case sensitive table names but the data directory is on a case-insensitive file system which is an unsupported combination. Please consider either using a case sensitive file system for your data directory or switching to a case-insensitive table name mode.", is printed in the server error log and the server exits.
130 lines
3.9 KiB
Text
130 lines
3.9 KiB
Text
#Server variable option 'lower_case_table_names' sets '0' as default value
|
||
#in case sensitive filesystem. Using 'lower_case_table_names=0' in case of
|
||
#insensitive filsystem is not allowed.
|
||
-- source include/have_case_sensitive_file_system.inc
|
||
--source include/have_sjis.inc
|
||
--source include/have_innodb.inc
|
||
--character_set sjis
|
||
--disable_warnings
|
||
drop table if exists `T1`;
|
||
drop table if exists `T2`;
|
||
drop table if exists `T3`;
|
||
drop table if exists `T4`;
|
||
drop table if exists `T5`;
|
||
drop table if exists `T6`;
|
||
drop table if exists `T7`;
|
||
drop table if exists `T8`;
|
||
drop table if exists `T9`;
|
||
drop table if exists t1;
|
||
--enable_warnings
|
||
|
||
#
|
||
# Test ENUM values with Japanese characters in sjis encoding
|
||
#
|
||
|
||
SET NAMES sjis;
|
||
SET character_set_database = sjis;
|
||
|
||
CREATE TABLE `T1` (`C1` ENUM('ア','イ','ウ'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = innodb;
|
||
CREATE TABLE `T2` (`C1` ENUM('あ','い','う'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = innodb;
|
||
CREATE TABLE `T3` (`C1` ENUM('ソ','十','表'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = innodb;
|
||
CREATE TABLE `T4` (`C1` ENUM('ア','イ','ウ'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = myisam;
|
||
CREATE TABLE `T5` (`C1` ENUM('あ','い','う'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = myisam;
|
||
CREATE TABLE `T6` (`C1` ENUM('ソ','十','表'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = myisam;
|
||
CREATE TABLE `T7` (`C1` ENUM('ア','イ','ウ'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = MEMORY;
|
||
CREATE TABLE `T8` (`C1` ENUM('あ','い','う'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = MEMORY;
|
||
CREATE TABLE `T9` (`C1` ENUM('ソ','十','表'), INDEX(`C1`)) DEFAULT CHARSET = sjis engine = MEMORY;
|
||
|
||
INSERT INTO `T1` VALUES ('ア'),('イ'),('ウ');
|
||
INSERT INTO `T2` VALUES ('あ'),('い'),('う');
|
||
INSERT INTO `T3` VALUES ('ソ'),('十'),('表');
|
||
INSERT INTO `T4` VALUES ('ア'),('イ'),('ウ');
|
||
INSERT INTO `T5` VALUES ('あ'),('い'),('う');
|
||
INSERT INTO `T6` VALUES ('ソ'),('十'),('表');
|
||
INSERT INTO `T7` VALUES ('ア'),('イ'),('ウ');
|
||
INSERT INTO `T8` VALUES ('あ'),('い'),('う');
|
||
INSERT INTO `T9` VALUES ('ソ'),('十'),('表');
|
||
|
||
SELECT * FROM `T1`;
|
||
SELECT * FROM `T2`;
|
||
SELECT * FROM `T3`;
|
||
SELECT * FROM `T4`;
|
||
SELECT * FROM `T5`;
|
||
SELECT * FROM `T6`;
|
||
SELECT * FROM `T7`;
|
||
SELECT * FROM `T8`;
|
||
SELECT * FROM `T9`;
|
||
|
||
SHOW CREATE TABLE `T1`;
|
||
SHOW CREATE TABLE `T2`;
|
||
SHOW CREATE TABLE `T3`;
|
||
SHOW CREATE TABLE `T4`;
|
||
SHOW CREATE TABLE `T5`;
|
||
SHOW CREATE TABLE `T6`;
|
||
SHOW CREATE TABLE `T7`;
|
||
SHOW CREATE TABLE `T8`;
|
||
SHOW CREATE TABLE `T9`;
|
||
|
||
DESC `T1`;
|
||
DESC `T2`;
|
||
DESC `T3`;
|
||
DESC `T4`;
|
||
DESC `T5`;
|
||
DESC `T6`;
|
||
DESC `T7`;
|
||
DESC `T8`;
|
||
DESC `T9`;
|
||
|
||
#
|
||
# Test problem with enum values after the colum with NOT NULL restriction
|
||
#
|
||
|
||
ALTER TABLE `T1` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T2` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T3` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T4` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T5` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T6` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T7` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T8` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
ALTER TABLE `T9` ADD `C2` CHAR(1) NOT NULL FIRST;
|
||
|
||
SHOW CREATE TABLE `T1`;
|
||
SHOW CREATE TABLE `T2`;
|
||
SHOW CREATE TABLE `T3`;
|
||
SHOW CREATE TABLE `T4`;
|
||
SHOW CREATE TABLE `T5`;
|
||
SHOW CREATE TABLE `T6`;
|
||
SHOW CREATE TABLE `T7`;
|
||
SHOW CREATE TABLE `T8`;
|
||
SHOW CREATE TABLE `T9`;
|
||
|
||
#
|
||
# Test to distinguish 0x9353 and 0x9373
|
||
# Bug#6206 ENUMs are not case sensitive even if declared BINARY
|
||
#
|
||
|
||
CREATE TABLE t1(c1 enum('鉄','都')) default character set = sjis;
|
||
INSERT INTO t1 VALUES('鉄'),('都');
|
||
SELECT * FROM t1 WHERE c1 LIKE '鉄';
|
||
DROP TABLE t1;
|
||
|
||
DESC `T1`;
|
||
DESC `T2`;
|
||
DESC `T3`;
|
||
DESC `T4`;
|
||
DESC `T5`;
|
||
DESC `T6`;
|
||
DESC `T7`;
|
||
DESC `T8`;
|
||
DESC `T9`;
|
||
|
||
DROP TABLE `T1`;
|
||
DROP TABLE `T2`;
|
||
DROP TABLE `T3`;
|
||
DROP TABLE `T4`;
|
||
DROP TABLE `T5`;
|
||
DROP TABLE `T6`;
|
||
DROP TABLE `T7`;
|
||
DROP TABLE `T8`;
|
||
DROP TABLE `T9`;
|