数据库中具有大量数据的表的一半设置为拉丁文1。 在这些Latin 1表中,如果该行需要文本输入(非整数),则将大多数行设置为utf8。
一切都是英文。
如果我需要将这些Latin 1表转换为utf8,我的情况有多严重?
答案 0 :(得分:1)
首先,澄清一下:您说“大多数行设置为utf8”;我假设您是说“大多数列设置为utf8”?
表上的latin1
的含义只是缺省值。它对性能等没有影响。
如果您未指定ALTER TABLE .. ADD COLUMN ..
而进行CHARACTER SET utf8
,唯一的“伤害”就会发生。
您说的所有文字都是英语?则latin1和utf8之间没有编码差异。带有重音字母等时,可能会出现问题。
存在一个性能问题:如果您在JOIN
列上同时VARCHAR
两个表,但是两个表中该列的CHARACTER SET
或COLLATION
不同,这将比那些设置相同的情况要慢。 (听起来好像没有这个问题。)再次,请注意,表的默认设置与列设置本身无关,而与之无关。
是的,将表的默认值设置为utf8会更“干净”。这应该是不进行转储的一种方法,但是可以一次更改一个表:
ALTER TABLE t CONVERT TO CHARACTER SET utf8;
这将更改表的默认 和所有尚未utf8的列。
答案 1 :(得分:0)
mysqldump --add-drop-table database_to_correct |替换CHARSET = latin1 CHARSET = utf8 | iconv -f latin1 -t utf8 | mysql database_to_correct