Configuring MySQL to use UTF-8
A project I’m working on at the moment is going to have multiple language options available, not all of which use the same alphabet (e.g. Russian and Chinese).
To lessen the pain commonly associated with internationalisation on the web, it’s beneficial to use the UTF-8 character set. This short summary from the may help explain better;
Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language.
…
Unicode enables a single software product or a single website to be targeted across multiple platforms, languages and countries without re-engineering. It allows data to be transported through many different systems without corruption.
Thankfully MySQL has supported Unicode for quite some time now, even if it’s not configured to use it by default.
First, let’s check what our settings are at the moment;
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.01 sec)
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
That’s to be expected, but it’s not really what we wanted.
Find your MySQL configuration file (on most Linux/BSD systems it’s /etc/my.cnf) and make sure it’s got the following statements under the relevant headers.
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
[client]
default-character-set=utf8
Restart MySQL and make sure it’s working;
service mysql restart
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| 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)
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| 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)
Update; pointed out that it’s worth demonstrating setting the charset and collation when creating tables too (good point!).
CREATE TABLE `content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`language` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM CHARACTER SET utf8 COLLATE utf8_general_ci;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-630303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- the "in" use in mysqlMySql
- mysql partition table use to_days bugMySql
- linux上mysql編碼 utf-8設定LinuxMySql
- MySQL5.6之use_index_extensions優化MySqlIndex優化
- 記住:永遠不要在 MySQL 中使用 UTF-8MySql
- configure: error: PCRE2 library and headers are required, or use --with-pcre1 and PCRE >= 8.32 with UTF-8 supportErrorHeaderUI
- MySQL 報錯MySQL server syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT'MySqlServerMIT
- 為什麼不建議在 MySQL 中使用 UTF-8?MySql
- 分享 - mysql big5 轉 utf-8 轉換程式MySql
- 【轉載】Kano Model — Ways to use it and NOT use it
- Nginx Configuring HTTPS serversNginxHTTPServer
- Configuring Harbor with HTTPS AccessHTTP
- 解決python連線mysql,UTF-8亂碼問題PythonMySql
- mysql資料庫C API函式mysql_store_result和mysql_use_result的區別MySql資料庫API函式
- nginx useNginx
- Mysql:從一個USE DB堵塞故障展開的探討MySql
- oracle hint_use_concat_use_nl_with_indexOracleIndex
- Linux Watchdog Daemon - ConfiguringLinux
- Configuring JBuilder 8 to work with Struts 1.1UI
- plsql use skillsSQL
- GPFS use with OracleOracle
- how to use typeset?
- USE EXPLAIN PLANAI
- Configuring the launch of the remote virtual machine to debugREMMac
- unicode,utf-8Unicode
- utf-8、UTF-8、utf8在使用中的區別
- 如何在MySQL資料庫中使用use來切換資料庫?MySql資料庫
- Use PHP7PHP
- IPFS_basic_use
- how to use coffee script
- Use index_descIndex
- why use dynamic SQL?SQL
- In Oracle,How to use dumpOracle
- WireGuard Use Notes
- [Typescript] Use Bitwise FlagsTypeScript
- unicode vs utf-8Unicode
- Oracle Hint:USE_NL、USE_MERGE、UESE_HASH(原理)Oracle
- Strut1.2 mysql5.0 tomcat5.5 utf-8的解決辦法。MySqlTomcat