目錄
1 Mysql存儲不區分大小寫帶來的影響舉例
1)hive裏存儲的字段是區分大小寫的
2)mysql裏存儲,默認是不區分大小寫的
3)當將hive表裏存儲在hdfs上的數據通過sqoop工具等灌到mysql裏的時候就會出問題
Q3WA,Q3Wa,Q3wA,Q3wa會被當做相同的id,灌入mysql的數據只會存在最後一條寫入的數據!
2 解決方案
2.1 建表時區分大小寫
1)區分大小寫的建表方式
#1.建表以及相關測試語句
CREATE TABLE Test
(
id VARCHAR(10) BINARY ,
name VARCHAR(20)
);
INSERT INTO Test(id,name) VALUE("a","bob");
UPDATE Test SET name='jackie' WHERE id='a';
UPDATE Test SET name='jack' WHERE id='A';
#2.具體執行過程與反饋
2)不區分大小寫的建表方式
#1.建表以及測試語句
CREATE TABLE Test(id VARCHAR(10), name VARCHAR(20) );
insert into Test(id,name) value ("a","bob");
UPDATE Test set name='jackie' where id='a';
UPDATE Test set name='jake' where id='A';
#2.具體執行過程與反饋
3)對比結果
區分大小寫時,UPDATE Test SET name='jack' WHERE id='A' 不會對 id='a'的記錄進行更新;
不區分大小寫,UPDATE Test SET name='jack' WHERE id='A' 會對 id='a'的記錄進行更新;
2.1 建完表後,ALTER修改表字段區分大小寫
#1.修改表結構以及驗證語句
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
ALTER TABLE Test MODIFY COLUMN `id` VARCHAR(10) BINARY;
UPDATE Test set name='bob' where id='a';
UPDATE Test set name='BOB' where id='A';
#2.修改表字段爲binary存儲
修改完以後,對id的大小寫已經有區分了。