程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql修改表默認字符集可能帶來的隱患

mysql修改表默認字符集可能帶來的隱患

編輯:MySQL綜合教程

mysql修改表默認字符集可能帶來的隱患   我們在建表後如果後續需要修改表的默認字符集,可以通過ALTER TABLE來修改表的默認編碼   ALTER TABLE tablename DEFAULT CHARACTER SET utf8; 但是這樣有個問題,只改了表定義的默認編碼,對於每個列的已有字段的內容還是使用以前的編碼,已有表數據不會做編碼轉換。   mysql> create table mybig5 (id int not null auto_increment primary key,          -> subject varchar(100) ) engine=innodb default charset big5; Query OK, 0 rows affected (0.81 sec)   mysql> show create table mybig5; +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table  | Create Table                                                                                                                                                     | +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | mybig5 | CREATE TABLE `mybig5` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `subject` varchar(100) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=big5 | +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)   mysql> alter table mybig5 default charset utf8; Query OK, 0 rows affected (0.17 sec) Records: 0  Duplicates: 0  Warnings: 0 然後我們插入一個多字節的字符串記錄到表裡   mysql> INSERT INTO mybig5 VALUES (NULL, UNHEX('E7BB8FE79086'));    01:08:19  [INSERT - 0 row(s), 0.000 secs]  [Error Code: 1366, SQL State: HY000]  Incorrect string value: '\xE7\xBB\x8F\xE7\x90\x86' for column 'SUBJECT' at row 1 ... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]   mysql> show create table mybig5; +--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table  | Create Table                                                                                                                                                                        | +--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | mybig5 | CREATE TABLE `mybig5` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `subject` varchar(100) CHARACTER SET big5 DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +--------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 我們可以看到列subject還是big5編碼,沒有改為utf8編碼。   我們可以使用2. ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;來修改列的編碼   mysql> show create table mybig5; mysql> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -> | Table  | Create Table                                                                                                                                                     | -> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -> | mybig5 | CREATE TABLE `mybig5` ( ->   `id` int(11) NOT NULL AUTO_INCREMENT, ->   `subject` varchar(100) DEFAULT NULL, ->   PRIMARY KEY (`id`) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | -> +--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -> 1 row in set (0.00 sec) 但是這裡要注意已有內容編碼轉換要注意編碼可轉換,不會成為亂碼
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved