Character Sets and Collations
来源:互联网 发布:淘宝店如何找代理商 编辑:程序博客网 时间:2024/06/11 13:08
Using this example, you can change character set and collation for a MySQL database table(s).
Most likely you will be need to do this if you haven’t specified character set and collation at the time of database/table creation and default character set/collation applied are not desirable.
Setting MySQL default character set and collation in my.cnf
Below are settings for MySQL version 5.5.9 and onwards.
Put them in /etc/mysql/my.cnf
is correct sections. Please be careful as some settings might be already present.
[mysqld]character-set-server=utf8 collation-server = utf8_unicode_ciinit-connect='SET NAMES utf8'init_connect='SET collation_connection = utf8_unicode_ci' skip-character-set-client-handshake #此处是忽略客户端的字符集,使用服务器的设置
Next, restart mysql and log into mysql shell:
mysql> show variables like "%character%";show variables like "%collation%";
Sample output as:
+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+8 rows in set (0.00 sec)+----------------------+-----------------+| Variable_name | Value |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database | utf8_general_ci || collation_server | utf8_general_ci |+----------------------+-----------------+3 rows in set (0.00 sec)
Checking current character set and collation for database/table/columns
For Database:
SELECT default_character_set_name, default_collation_name FROM information_schema.SCHEMATA WHERE schema_name = "databasename";
It will show output as:
+----------------------------+------------------------+| default_character_set_name | default_collation_name |+----------------------------+------------------------+| latin1 | latin1_swedish_ci |+----------------------------+------------------------+
For Tables:
SELECT T.table_name, T.table_collation, CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSAWHERE CCSA.collation_name = T.table_collationAND T.table_schema = "databasename";
Sample output as below:
+-----------------------------------------------------+-------------------+--------------------+| table_name | table_collation | character_set_name |+-----------------------------------------------------+-------------------+--------------------+| rtc_wp_rtAccountToken | latin1_swedish_ci | latin1 || rtc_wp_rtAccountVerify | latin1_swedish_ci | latin1 || rtc_wp_rt_crm_mail_messageids | latin1_swedish_ci | latin1 || rtc_wp_w3tc_cdn_queue | latin1_swedish_ci | latin1 || gp_meta | utf8_general_ci | utf8 |+-----------------------------------------------------+-------------------+--------------------+
For Columns:
SELECT table_name, column_name, character_set_name, collation_name FROM information_schema.`COLUMNS` C WHERE character_set_name != 'NULL' AND table_schema = "db_name"
Sample Output:
+------------------------+--------------+--------------------+-------------------+| table_name | column_name | character_set_name | collation_name |+------------------------+--------------+--------------------+-------------------+| rtc_wp_rtAccountToken | accesstoken | latin1 | latin1_swedish_ci || rtc_wp_rtAccountToken | refreshtoken | latin1 | latin1_swedish_ci || rtc_wp_rtAccountVerify | email | latin1 | latin1_swedish_ci || rtc_wp_rtAccountVerify | type | latin1 | latin1_swedish_ci || rtc_wp_rtAccountVerify | code | latin1 | latin1_swedish_ci |+------------------------+--------------+--------------------+-------------------+
Converting character set and collations
MAKE BACKUP
We are serious. Just use mysqldump rather than regretting it later
Changing Database Character Sets and Collations
This is simplest:
ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
Replace your database name with db_name. Also after running query verify if database-level defaults are changed indeed.
Changing Tables Character Sets and Collations
Below is a syntax to covert character set ofwp_posts
and wp_postmeta
tables.
alter table wp_posts convert to character set utf8 collate utf8_unicode_ci;alter table wp_postmeta convert to character set utf8 collate utf8_unicode_ci;
If you want to covert all your MySQL tables, then run a command like below on database db_wordpress
mysql -e "SELECT concat('alter table ', TABLE_NAME , ' convert to character set utf8 collate utf8_unicode_ci;')FROM information_schema.TABLESWHERE table_schema = 'db_wordpress'AND TABLE_COLLATION = 'latin1_swedish_ci'" |tail -n+2 > collation.sql
After you run above query, check collation.sql
content to verify if all rows are correct. If collation.sql
is empty, you probably do not have a table using MyISAM engine.
If all looks good, run following to convert all mysql tables to InnoDB.
mysql db_wordpress < collation.sql
Changing Column Character Sets and Collations
Below is syntax to convert columns to utf8
alter table table_name change col_name col_name col_data_type character set utf8;
Please note that we have to use same col_name twice!
col_data_type can be found form a sql query like…
mysql> SELECT table_name, column_name, data_type, character_set_name, collation_name FROM information_schema.`COLUMNS` WHERE table_schema = "db_name" AND table_name = "table_name" AND column_name = "col_name";
Sample output:
+--------------+--------------+-----------+| table_name | column_name | data_type |+--------------+--------------+-----------+| wp_posts | post_content | longtext |+--------------+--------------+-----------+
Example for wordpress’s wp_posts table
alter table wp_posts change post_content post_content LONGTEXT CHARACTER SET utf8;
Please be very careful for column conversion. Specially if you have non-english characters stored in database. In that case, you can refer to this WordPress Codex section.
- Character Sets and Collations
- Character Sets and Collations
- Connection Character Sets and Collations
- MariaDB_Setting Character Sets and Collations
- character sets and collations in mysql
- 字符集及其比较方式(Character Sets and Collations)
- Character sets and codepages
- MYSQL 中,Character Sets 和 Collations的区别
- Win32 Series - Keyboard Messages and Character Sets
- The Minimum About Unicode and Character Sets
- Introducing Character Sets and Encodings(字符集与编码介绍)
- Positively Must Know About Unicode and Character Sets (No Excuses!)
- 字符集(Character Sets)
- Converting Character Sets
- Listing of Character Sets FOR 9.2, 9.0.1 and 8.1.7 including Language references
- Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets
- Positively Developer Must Know About Unicode and Character Sets (No Excuses!)
- Regular Expressions:Character Classes or Character Sets
- Win7下Nginx的安装与配置
- AjaxAnyWhere在web中应用
- JavaScript中发布/订阅模式的简单实例
- 易语言学习第二十二课----寻找进程PID
- Python:类
- Character Sets and Collations
- Python脚本运行出现语法错误
- ORA-01704: 文字字符串过长
- 10032---HttpClient访问,需要用户名密码时
- MalformedByteSequenceException:3 字节的 UTF-8 序列的字节 3 无效。
- 《机器学习实战》Logisic回归算法(2)之从疝气病症预测病马的死亡率
- Android之玩转MPAndroidChart让(折线图、柱形图、饼状图、散列图、雷达图)优雅的舞动
- 堆和堆排序
- JQuery语法、选择器、事件器