mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	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.
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Bug #13083023 - 60229: BROKEN COMPATIBILITY: ERROR WHILE CREATE TABLE
 | |
| # WITH FOREIGN KEY CONSTRAINT.
 | |
| 
 | |
| #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_innodb.inc
 | |
| 
 | |
| CREATE TABLE PERSON (
 | |
|   PERSON_ID VARCHAR(50) NOT NULL,
 | |
|   DOB VARCHAR(50) NOT NULL,
 | |
|   NAME NVARCHAR(255) NOT NULL,
 | |
|   CONSTRAINT PK_PERSON PRIMARY KEY (PERSON_ID, DOB)
 | |
| )Engine=InnoDB;
 | |
| 
 | |
| 
 | |
| CREATE TABLE PHOTO (
 | |
|   PERSON_ID VARCHAR(50) NOT NULL,
 | |
|   DOB VARCHAR(50) NOT NULL,
 | |
|   PHOTO_DETAILS VARCHAR(50) NULL,
 | |
|   CONSTRAINT PK_PHOTO PRIMARY KEY (PERSON_ID, DOB),
 | |
|   CONSTRAINT FK_PHOTO_2_PERSON FOREIGN KEY (PERSON_ID, DOB) REFERENCES PERSON (PERSON_ID, DOB)
 | |
| )Engine=InnoDB;
 | |
| 
 | |
| 
 | |
| CREATE TABLE ADDRESS (
 | |
|   PERSON_ID VARCHAR(50) NOT NULL,
 | |
|   DOB VARCHAR(50) NOT NULL,
 | |
|   ADDRESS_ID VARCHAR(50) NOT NULL,
 | |
|   ADDRESS_DETAILS NVARCHAR(250) NULL,
 | |
|   CONSTRAINT PK_ADDRESS PRIMARY KEY (PERSON_ID, DOB, ADDRESS_ID),
 | |
|   CONSTRAINT FK_ADDRESS_2_PERSON FOREIGN KEY (PERSON_ID, DOB) REFERENCES PERSON (PERSON_ID, DOB) ON DELETE CASCADE
 | |
| )Engine=InnoDB;
 | |
| 
 | |
| INSERT INTO PERSON VALUES("10", "11011999", "John");
 | |
| INSERT INTO PHOTO VALUES("10", "11011999", "new photo");
 | |
| 
 | |
| DROP TABLE PHOTO;
 | |
| DROP TABLE ADDRESS;
 | |
| DROP TABLE PERSON;
 | |
| 
 |