是否有可以运行的SQL
或PHP
脚本来更改数据库中所有表和字段的默认排序规则?
我可以自己写一个,但我认为这应该是在像这样的网站上容易获得的东西。如果我能在别人发布之前自己想出一个,我会自己发布的。
发布于 2008-09-19 21:01:16
注意!如果你真的将utf存储为另一种编码,你的手头可能会变得一团糟。先后退。然后尝试一些标准方法:
例如http://www.cesspit.net/drupal/node/898 http://www.hackszine.com/blog/archive/2007/05/mysql_database_migration_latin.html
我不得不将所有文本字段转换为二进制,然后再转换回varchar/text。这救了我的命。
我的数据是以latin1格式存储的UTF8。我做了什么:
删除索引。将字段转换为二进制。转换为UTF8-通用配置项
如果您的on LAMP,在与数据库交互之前,不要忘记添加set NAMES命令,并确保您设置了字符编码标头。
发布于 2009-03-21 18:41:36
可以在一个命令中完成(而不是PHP的148个命令):
mysql --database=dbname -B -N -e "SHOW TABLES" \
| awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' \
| mysql --database=dbname &
你一定会喜欢命令行..。(您可能需要对mysql
使用--user
和--password
选项)。
编辑:为了避免外键问题,增加了SET foreign_key_checks = 0;
和SET foreign_key_checks = 1;
发布于 2008-09-19 21:04:36
此PHP代码段将更改数据库中所有表的排序规则。(它取自this site。)
<?php
// your connection
mysql_connect("localhost","root","***");
mysql_select_db("db1");
// convert code
$res = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($res))
{
foreach ($row as $key => $table)
{
mysql_query("ALTER TABLE " . $table . " CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci");
echo $key . " => " . $table . " CONVERTED<br />";
}
}
?>
https://stackoverflow.com/questions/105572
复制相似问题