- 1 1. ã¯ããã«
- 2 2. æ¥æ¬èªãæååãããäž»ãªåå
- 2.1 ãªãMySQLã§æ¥æ¬èªãæ£ãã衚瀺ãããªãã®ãïŒ
- 2.2 åå 1ïŒããã©ã«ãã®æåã³ãŒãã latin1 ã®ãŸãŸ
- 2.3 åå 2ïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®æåã³ãŒãã®äžäžèŽ
- 2.4 åå 3ïŒããŒã¿ããŒã¹ã»ããŒãã«ã»ã«ã©ã ã®èšå®ããã©ãã©
- 2.5 ãŸãšãïŒåå ã®å€ãã¯ãæåã³ãŒãã®äžäžèŽã
- 3 3. MySQLã®æåã³ãŒãèšå®ã確èªããæ¹æ³
- 4 4. æ¥æ¬èªãæ£ããæ±ãããã®èšå®æ¹æ³
- 4.1 æ£ããèšå®ã§ãæååãããšãµãšãã©
- 4.1.1 4.1 ã¯ã©ã€ã¢ã³ãåŽã®èšå®ïŒæ¥ç¶æã«æç€ºããã
- 4.1.2 â è£è¶³ïŒ
- 4.1.3 4.2 ãµãŒããŒåŽã®èšå®ïŒmy.cnf ã«ããæ°žç¶èšå®
- 4.1.4 â æ³šæç¹ïŒ
- 4.1.5 4.3 ããŒã¿ããŒã¹ãšããŒãã«ã®æåã³ãŒãæå®
- 4.1.6 4.4 æšå¥šããæåã³ãŒãïŒãªã utf8mb4 ãªã®ãïŒ
- 4.1 æ£ããèšå®ã§ãæååãããšãµãšãã©
- 5 5. Dockerç°å¢ã§ã®æ¥æ¬èªå¯Ÿå¿
- 6 6. ãããããã©ãã«ãšãã®å¯ŸåŠæ³
- 6.1 èšå®ããã®ã«æååãâŠïŒãŸã åå ã¯æ®ã£ãŠãããããããŸãã
- 6.1.1 ãã©ãã«1ïŒèšå®å€æŽãåæ ãããªã
- 6.1.2 ãã©ãã«2ïŒã¿ãŒããã«ãã³ãã³ãã©ã€ã³äžã§æ¥æ¬èªãæååã
- 6.1.3 ãã©ãã«3ïŒæ¢åã®ããŒã¿ããŒã¹ãããŒãã«ã latin1 ã§äœãããŠãã
- 6.1.4 ãã©ãã«4ïŒPHPãPythonãªã©ã¢ããªã±ãŒã·ã§ã³åŽã§ã®æåã³ãŒãäžäžèŽ
- 6.1.5 ãã©ãã«5ïŒCSVãExcelãšã®é£æºæã«æååããã
- 6.2 ãã©ãã«è§£æ¶ã®ããã®ç·åãã§ãã¯ãªã¹ã
- 6.1 èšå®ããã®ã«æååãâŠïŒãŸã åå ã¯æ®ã£ãŠãããããããŸãã
- 7 7. ãŸãšã
- 8 8. ãããã質åïŒFAQïŒ
1. ã¯ããã«
MySQLã§æ¥æ¬èªãããŸãæ±ããªãïŒãã®åå ãšè§£æ±ºçã培åºè§£èª¬
Webã¢ããªã±ãŒã·ã§ã³ãWordPressãªã©ãããŒã¿ããŒã¹ãšããŠåºã䜿ãããŠããMySQLã§ãããæ¥æ¬èªãæ±ãéã«ãæååããããã???ã«ãªãããšãã£ãåé¡ã«çŽé¢ããçµéšã¯ãããŸãããïŒ
ç¹ã«åå¿è ã®æ¹ããããŒã«ã«éçºç°å¢ïŒXAMPPãMAMPãªã©ïŒãDockerãªã©ã®ä»®æ³ç°å¢ã§MySQLã䜿ã£ãŠããå Žåãæ¥æ¬èªãæ£ãã衚瀺ãããªãã±ãŒã¹ãå€ãèŠãããŸããããã¯MySQLã®æåã³ãŒãïŒãšã³ã³ãŒãã£ã³ã°ïŒèšå®ãé©åã§ãªãããšãäž»ãªåå ã§ãã
ãã®èšäºã§ã¯ãMySQLã§æ¥æ¬èªãæ£ããæ±ãããã®èšå®æ¹æ³ãããããããã©ãã«ãšãã®è§£æ±ºçãŸã§ãããããããã解説ããŸãã
ãŸããDockerç°å¢ãmy.cnfã®èšå®ãæ¢åããŒã¿ããŒã¹ã®ä¿®æ£æ¹æ³ãªã©ãå®éã®çŸå Žã§ã圹ç«ã€å ·äœçãªããŠããŠãå«ããŠããŸããåå¿è ããéçºçŸå Žã®ãšã³ãžãã¢ãŸã§ãå¹ åºãèªè ãå®å¿ããŠå®è·µã§ããå 容ã«ãªã£ãŠããŸãã®ã§ããã²æåŸãŸã§ã芧ãã ããã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãããªãæ¥æ¬èªãæååãããŠããŸãã®ãïŒããã®æ ¹æ¬åå ã«ã€ããŠè§£èª¬ããŸãã
2. æ¥æ¬èªãæååãããäž»ãªåå
ãªãMySQLã§æ¥æ¬èªãæ£ãã衚瀺ãããªãã®ãïŒ
MySQLã§æ¥æ¬èªãã???ããæå³äžæãªèšå·ãšããŠè¡šç€ºãããå Žåããã®åå ã¯ã»ãŒééããªãæåã³ãŒãã®èšå®ãã¹ã«ãããŸããMySQLã¯éåžžã«æè»ãªããŒã¿ããŒã¹ã§ãããæåã³ãŒãïŒcharacter setïŒãšç §åé åºïŒcollationïŒã®èšå®ãäžèŽããŠããªããšãæ£ããããŒã¿ãæ ŒçŽã»ååŸã§ããŸããã
以äžã«ãããããåå ã3ã€ã«ãŸãšããŸããã
åå 1ïŒããã©ã«ãã®æåã³ãŒãã latin1
ã®ãŸãŸ
MySQLã®å€ãããŒãžã§ã³ãåæèšå®ã§ã¯ãæåã³ãŒãã latin1
ïŒè¥¿ãšãŒãããèšèªåãïŒã«ãªã£ãŠããããšããããŸããlatin1
ã§ã¯æ¥æ¬èªãæ£ããæ±ãããšãã§ãããããŒã¿ãæ¿å
¥ããæç¹ã§æåãç ŽæããŠããŸããããããŒã¿ããŒã¹ã«ä¿åãããæç¹ã§æ¢ã«æååãããŠããããšã«ãªããŸãã
åå 2ïŒã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®æåã³ãŒãã®äžäžèŽ
MySQLã§ã¯ã次ã®3ã€ã®ã¿ã€ãã³ã°ã§æåã³ãŒããé¢äžããŸãã
- ã¯ã©ã€ã¢ã³ãããã®éä¿¡æïŒcharacter_set_clientïŒ
- ãµãŒããŒåŽã®åŠçæïŒcharacter_set_serverïŒ
- çµæã®åºåæïŒcharacter_set_resultsïŒ
ããšãã°ãã¯ã©ã€ã¢ã³ãã utf8mb4
ã䜿ã£ãŠããŠãããµãŒããŒåŽã latin1
ã§åŠçããŠããŸããšãéäžã§æåãç ŽæããŸãããã®éäžèŽããã£ãšããããã¡ãªèœãšã穎ã§ãã
åå 3ïŒããŒã¿ããŒã¹ã»ããŒãã«ã»ã«ã©ã ã®èšå®ããã©ãã©
æ°ããããŒãã«ãäœæããéãç¹ã«æåã³ãŒããæç€ºããªãã£ãå ŽåãMySQLã®ããã©ã«ãèšå®ããã®ãŸãŸé©çšãããŸããçµæãšããŠã
- ããŒã¿ããŒã¹ã¯
utf8mb4
ã ãã - ããŒãã«ã¯
utf8
ã - ã«ã©ã ã¯
latin1
ãªã©ã
äžè²«æ§ã®ãªãç¶æ ã«ãªããä¿åã»è¡šç€ºæã«æååããçºçããŸãã
ãŸãšãïŒåå ã®å€ãã¯ãæåã³ãŒãã®äžäžèŽã
MySQLã§æ¥æ¬èªãæååãããåå ã®å€ãã¯ããèšå®ãããŠããæåã³ãŒããäžèŽããŠããªãããšãã«ãããã®ã§ããæ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãMySQLã®çŸåšã®æåã³ãŒãèšå®ã確èªããæ¹æ³ã«ã€ããŠè©³ãã解説ããŸããé©åãªç¢ºèªãè¡ãããšã§ãæååãã®åå ãç¹å®ããè¿ éã«ä¿®æ£ããããšãã§ããŸãã
3. MySQLã®æåã³ãŒãèšå®ã確èªããæ¹æ³
ãã©ãã«ã®åå ãçªãæ¢ããã«ã¯ãçŸåšã®èšå®ç¢ºèªããç¬¬äžæ©
MySQLã§æ¥æ¬èªãæ£ããæ±ããªããšããæåã«ç¢ºèªãã¹ããªã®ãæåã³ãŒãïŒcharacter setïŒãšç
§åé åºïŒcollationïŒã®çŸåšã®èšå®ã§ãã
MySQLã§ã¯ãã¯ã©ã€ã¢ã³ããšãµãŒããŒã®éã§è€æ°ã®æåã³ãŒããããåããããŠãããããããäžèŽããŠããå¿
èŠããããŸãã
ããã§ã¯ãã³ãã³ãã©ã€ã³ãSQLã¯ãšãªã䜿ã£ãŠèšå®ã確èªããæ¹æ³ã解説ããŸãã
SHOW VARIABLES
ã³ãã³ãã§æåã³ãŒãããã§ãã¯
MySQLã«æ¥ç¶ããç¶æ ã§ã以äžã®SQLãå®è¡ããããšã§ãçŸåšã®æåã³ãŒãèšå®ã確èªã§ããŸãã
SHOW VARIABLES LIKE 'character_set%';
ãã®ã³ãã³ããå®è¡ãããšã以äžã®ãããªåºåãåŸãããŸãïŒ
+--------------------------+---------+
| Variable_name | Value |
+--------------------------+---------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+---------+
åèšå®é ç®ã®æå³
é ç®å | æå³ãšåœ¹å² |
---|---|
character_set_client | ã¯ã©ã€ã¢ã³ãããéä¿¡ãããæååã®ãšã³ã³ãŒãã£ã³ã° |
character_set_connection | ã¯ã©ã€ã¢ã³ãâãµãŒããŒéã®éä¿¡äžã«äœ¿ãããæåã³ãŒã |
character_set_results | ã¯ãšãªã®çµæãã¯ã©ã€ã¢ã³ãã«è¿ããããšãã®æåã³ãŒã |
character_set_database | çŸåšéžæãããŠããããŒã¿ããŒã¹ã®ããã©ã«ãæåã³ãŒã |
character_set_server | æ°èŠããŒã¿ããŒã¹ã»ããŒãã«äœææã®ããã©ã«ãæåã³ãŒã |
character_set_system | ãµãŒããŒå éšã§äœ¿çšãããæåã³ãŒãïŒéåžžå€æŽäžèŠïŒ |
ç¹ã«ãcharacter_set_client
ã»character_set_connection
ã»character_set_results
ã®3ã€ãäžèŽããŠããããéèŠã§ãããã®3ã€ãäžäžèŽã ãšãéã£ãæååãå£ããŠå±ãïŒè¿ããããšããçŸè±¡ãçºçããŸãã
æååã鲿¢ã®ããã®ãã§ãã¯ãã€ã³ã
- ãã¹ãŠã®é
ç®ã
utf8mb4
ã«ãªã£ãŠãããç¢ºèª - ç°ãªãæåã³ãŒããæ··åšããŠããå Žåã¯ãããšã§ç޹ä»ããèšå®å€æŽãè¡ã
- ããŒãã«ãã«ã©ã åäœã§ãå¥éæåã³ãŒããæå®ãããŠããå Žåãããã®ã§æ³šæ
è£è¶³ïŒç §åé åºïŒcollationïŒã確èªããã
ç §åé åºã¯æååã®äžŠã³é ãæ¯èŒæ¹æ³ã«åœ±é¿ãäžããŸãã以äžã®ã³ãã³ãã§ç¢ºèªå¯èœã§ãïŒ
SHOW VARIABLES LIKE 'collation%';
æååããã®ãã®ã®åå ã«ã¯ãªãã«ããã§ãããæ¥æ¬èªãå«ããœãŒããæ€çŽ¢ç²ŸåºŠã«é¢ãã£ãŠãããããutf8mb4_general_ci
ã utf8mb4_unicode_ci
ã䜿ãããŠããããšã確èªãããšå®å¿ã§ãã
次ã®ã»ã¯ã·ã§ã³ã§ã¯ãå®éã«ãããã®èšå®ãã©ã倿Žããã°ããã®ããMySQLã§æ¥æ¬èªãæ£ããæ±ãããã®å ·äœçãªèšå®æ¹æ³ã解説ããŠãããŸãã
4. æ¥æ¬èªãæ£ããæ±ãããã®èšå®æ¹æ³
æ£ããèšå®ã§ãæååãããšãµãšãã©
MySQLã§æ¥æ¬èªãæ£ããæ±ãããã«ã¯ããã¹ãŠã®æåã³ãŒãèšå®ãçµ±äžããŠããããšãéèŠã§ããç¹ã« utf8mb4
ã¯æ¥æ¬èªã ãã§ãªããçµµæåãç¹æ®èšå·ã«ã察å¿ããæšå¥šèšå®ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã¯ã©ã€ã¢ã³ãåŽã»ãµãŒããŒåŽã»ããŒãã«ãã«ã©ã ã®èšå®æ¹æ³ãå ·äœçã«è§£èª¬ããŸãã
4.1 ã¯ã©ã€ã¢ã³ãåŽã®èšå®ïŒæ¥ç¶æã«æç€ºããã
MySQLã«æ¥ç¶ããçŽåŸã«ä»¥äžã®ã³ãã³ããå®è¡ããããšã§ãéä¿¡äžã®æåã³ãŒãèšå®ã utf8mb4
ã«åºå®ã§ããŸãã
SET NAMES 'utf8mb4';
ããã¯ã以äžã®3ã€ã®å€æ°ã«åæã«åæ ãããŸãïŒ
character_set_client
character_set_connection
character_set_results
â è£è¶³ïŒ
- PHPããæ¥ç¶ããå Žåã¯
mysqli_set_charset($conn, 'utf8mb4');
ã®ããã«èšè¿°ããŸãã - CLIã§
mysql
ã³ãã³ãã䜿ããšã--default-character-set=utf8mb4
ãæå®ããã®ã广çã§ãã
4.2 ãµãŒããŒåŽã®èšå®ïŒmy.cnf
ã«ããæ°žç¶èšå®
ãµãŒããŒã®èšå®ãã¡ã€ã« my.cnf
ãŸã㯠my.ini
ã«ã以äžã®ãããªèšè¿°ãå ããããšã§ãMySQLå
šäœã®ããã©ã«ãæåã³ãŒãã utf8mb4
ã«å€æŽã§ããŸãã
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
â æ³šæç¹ïŒ
- èšå®å€æŽåŸã¯MySQLã®åèµ·åãå¿ èŠã§ãã
- äŸïŒ
sudo systemctl restart mysql
ïŒLinuxïŒ - ãã¡ã€ã«ã®å Žæã¯ç°å¢ã«ãã£ãŠç°ãªããLinuxã§ã¯
/etc/mysql/my.cnf
ã/etc/my.cnf
ããã䜿ãããŸãã
4.3 ããŒã¿ããŒã¹ãšããŒãã«ã®æåã³ãŒãæå®
æ°ããããŒã¿ããŒã¹ãããŒãã«ãäœæããå Žåãæç€ºçã«æåã³ãŒããæå®ããŠãããŸãããã
ããŒã¿ããŒã¹ã®äœæäŸïŒ
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ããŒãã«ã®äœæäŸïŒ
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
æ¢åã®ããŒãã«ã倿Žããå ŽåïŒ
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4.4 æšå¥šããæåã³ãŒãïŒãªã utf8mb4
ãªã®ãïŒ
MySQLã«ã¯ utf8
ãšããååã®æåã³ãŒãããããŸãããããã¯æå€§3ãã€ããŸã§ã®UTF-8衚çŸã«ãã察å¿ããŠããŸããããã®ãããçµµæåãäžéšã®æŒ¢åïŒç°äœåãªã©ïŒãä¿åã§ããªããšããåé¡ããããŸãã
äžæ¹ utf8mb4
ã¯æå€§4ãã€ããŸã§å¯Ÿå¿ããŠãããå®å
šãªUTF-8äºæã§ãããããçŸåšã§ã¯ãã¡ãã䜿ãã®ãäž»æµã§ãã
æ¬¡ç« ã§ã¯ãDockerç°å¢ã§MySQLã䜿ãå Žåã«ç¹æã®æ¥æ¬èªèšå®ã泚æç¹ã«ã€ããŠè§£èª¬ããŸããä»®æ³ç°å¢ã§ãæååããèµ·ãããªãããã®ãã€ã³ããæŒãããŠãããŸãããã
5. Dockerç°å¢ã§ã®æ¥æ¬èªå¯Ÿå¿
ã³ã³ããç°å¢ã§ãæ¥æ¬èªãæ£ããæ±ãããã«
è¿å¹Žãéçºç°å¢ãšããŠDockerãå©çšããã±ãŒã¹ãå¢ããŠããŸããããDockeräžã®MySQLã§æ¥æ¬èªãæååãããããšãã声ãããè³ã«ããŸããããã¯ãã³ã³ããã®ãã±ãŒã«èšå®ãMySQLã®åæèšå®ãé©åã§ãªãããšãåå ã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãDockerç°å¢ã§MySQLã䜿çšããéã«æ¥æ¬èªãæ£ããæ±ãããã®å ·äœçãªå¯ŸåŠæ³ã玹ä»ããŸãã
5.1 Dockerfileã§ãã±ãŒã«ïŒèšèªç°å¢ïŒãæ¥æ¬èªå¯Ÿå¿ã«èšå®
MySQLã³ã³ããã ãã§ãªããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒåŽã§ãæ¥æ¬èªãæ±ãå Žåããã±ãŒã«èšå®ãå¿ èŠã§ãã以äžã¯DebianããŒã¹ã®Dockerfileã®äžäŸã§ãïŒ
RUN apt-get update && apt-get install -y locales && locale-gen ja_JP.UTF-8 && update-locale LANG=ja_JP.UTF-8
ENV LANG=ja_JP.UTF-8
ENV LC_ALL=ja_JP.UTF-8
â ãã€ã³ãïŒ
- ã¢ããªã±ãŒã·ã§ã³åŽã§æ¥æ¬èªãã¡ã€ã«ãèªã¿æžãããéã®ãšã³ã³ãŒãã£ã³ã°ãšã©ãŒãé²ããŸãã
- MySQLåäœã§ã¯ãªããPHPãPythonãªã©ã®å®è¡ç°å¢ã«ã圱é¿ããŸãã
5.2 docker-composeã§MySQLã«æåã³ãŒããæå®ããæ¹æ³
docker-compose.yml
ã䜿ã£ãŠMySQLã³ã³ãããç«ã¡äžããéã以äžã®ããã«ç°å¢å€æ°ã§æåã³ãŒããæå®ããããšãã§ããŸãã
services:
db:
image: mysql:8.0
container_name: mysql-ja
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: mydb
MYSQL_USER: user
MYSQL_PASSWORD: password
TZ: Asia/Tokyo
LANG: ja_JP.UTF-8
LC_ALL: ja_JP.UTF-8
command:
--character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
â è£è¶³ïŒ
command:
ã»ã¯ã·ã§ã³ã§MySQLèµ·åæã®ãã©ã¡ãŒã¿ãèšå®ã§ããŸããTZ
ãLANG
ãæ¥æ¬èªç°å¢ãæŽããäžã§æå¹ã§ãã
5.3 MySQLã³ã³ããå ã§ã®æ¥æ¬èªã®åäœç¢ºèª
MySQLãæ£ãã utf8mb4
ã«èšå®ãããŠãããã©ããã確èªããã«ã¯ã以äžã®ããã«MySQLã³ã³ããã«å
¥ã£ãŠã³ãã³ããå®è¡ããŸãïŒ
docker exec -it mysql-ja mysql -u root -p
ãã°ã€ã³åŸã次ã®ã³ãã³ãã§èšå®ã確èªïŒ
SHOW VARIABLES LIKE 'character_set%';
ãã¹ãŠã utf8mb4
ã«ãªã£ãŠããã°ãæ¥æ¬èªã®ä¿åã»è¡šç€ºã«åé¡ã¯èµ·ãã«ãããªããŸãã
ãŸãšãïŒDockerç°å¢ã§ã¯ãèµ·åæèšå®ããšããã±ãŒã«ããéµ
Dockerç°å¢ã§ãMySQLã§æ¥æ¬èªãå®å šã«æ±ãã«ã¯ã
- MySQLã³ã³ããã®èµ·åæã«
utf8mb4
ãæç€º - ã¢ããªåŽã³ã³ããã®ãã±ãŒã«ã
ja_JP.UTF-8
ã«èšå®
ãšãã£ãäºåã®èšå®ãéåžžã«éèŠã§ãã
次ã®ç« ã§ã¯ããããŸã§ã®ãã€ã³ããç°¡æœã«ãŸãšãããšãšãã«ãä»åŸMySQLã§æ¥æ¬èªãå®å šã«æ±ãããã®ãã³ãããå±ãããŸããèšäºã®ç·ãŸãšããšããŠããã²ã掻çšãã ããã
6. ãããããã©ãã«ãšãã®å¯ŸåŠæ³
èšå®ããã®ã«æååãâŠïŒãŸã åå ã¯æ®ã£ãŠãããããããŸãã
MySQLã®èšå®ã utf8mb4
ã«å€æŽããã«ãããããããæ¥æ¬èªãæ£ãã衚瀺ãããªãããããã¯ä¿åã§ããªããšããã±ãŒã¹ã¯å°ãªããããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ãå®éã«ããå ±åããããã©ãã«ãšããã®å
·äœçãªè§£æ±ºçã玹ä»ããŸãã
ãã©ãã«1ïŒèšå®å€æŽãåæ ãããªã
åå ïŒ
MySQLã®èšå®ãã¡ã€ã«ïŒmy.cnf
ã docker-compose.yml
ïŒã倿ŽããããšãMySQLãåèµ·åããŠããªãããšãåå ã§åæ ãããŠããªãã±ãŒã¹ããããããŸãã
å¯ŸåŠæ³ïŒ
- ãµãŒããŒç°å¢ãªã
sudo systemctl restart mysql
ã§åèµ·å - Dockerãªã
docker-compose down
âdocker-compose up -d
ãå®è¡
ãã©ãã«2ïŒã¿ãŒããã«ãã³ãã³ãã©ã€ã³äžã§æ¥æ¬èªãæååã
åå ïŒ
MySQLèªäœã§ã¯ãªããã¿ãŒããã«ã®è¡šç€ºæåã³ãŒããåå ã§æååãããã±ãŒã¹ã§ããããšãã°ãWindowsã®ã³ãã³ãããã³ããã§UTF-8ãæ£ãã衚瀺ãããªããªã©ã
å¯ŸåŠæ³ïŒ
- Windowsã®å ŽåïŒ
chcp 65001
ã³ãã³ãã§UTF-8ã«åãæ¿ãã - macOS/Linuxã®å ŽåïŒã¿ãŒããã«ã®ãšã³ã³ãŒãã£ã³ã°ãUTF-8ã«èšå®ïŒå€ãã¯ããã©ã«ãã§å¯Ÿå¿ïŒ
ãã©ãã«3ïŒæ¢åã®ããŒã¿ããŒã¹ãããŒãã«ã latin1
ã§äœãããŠãã
åå ïŒ
æ°èŠäœæã§ã¯ãªãããã§ã«éçšäžã®ããŒã¿ããŒã¹ãããŒãã«ã latin1
ã§äœãããŠããå Žåããã®äžã®æ¥æ¬èªããŒã¿ã¯æ¢ã«ç ŽæããŠããå¯èœæ§ããããŸãã
å¯ŸåŠæ³ïŒ
- ããŒãã«æ§é ã確èªïŒ
SHOW CREATE TABLE your_table_name;
- ããŒãã«ã倿ïŒ
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
泚æïŒ
æ¢ã«å£ããŠããããŒã¿ã¯ããã®æäœã§ã¯ä¿®åŸ©ã§ããŸãããããã¯ã¢ããããã³ããååŸããŠãããæåã§ã®ä¿®æ£ãèŠéã«å
¥ããŸãããã
ãã©ãã«4ïŒPHPãPythonãªã©ã¢ããªã±ãŒã·ã§ã³åŽã§ã®æåã³ãŒãäžäžèŽ
åå ïŒ
MySQLåŽã utf8mb4
ã«å¯Ÿå¿ããŠããŠããã¢ããªã±ãŒã·ã§ã³ãéä¿¡ããæååãç°ãªããšã³ã³ãŒãã£ã³ã°ã§ããå ŽåãæååããçºçããŸãã
å¯ŸåŠæ³ïŒ
- PHPïŒ
mysqli_set_charset($conn, "utf8mb4");
- PythonïŒMySQL ConnectorïŒïŒ
charset='utf8mb4'
ãæ¥ç¶æã«æå®
ãã©ãã«5ïŒCSVãExcelãšã®é£æºæã«æååããã
åå ïŒ
CSVãExcelãšã®ã€ã³ããŒãã»ãšã¯ã¹ããŒãæã¯ãæåã³ãŒããShift-JISãBOMä»ãUTF-8ã«ãªã£ãŠããããšããããMySQLã® utf8mb4
ãšã¯äºææ§ã«æ³šæãå¿
èŠã§ãã
å¯ŸåŠæ³ïŒ
- CSVãèªã¿èŸŒãåã«æåã³ãŒããUTF-8ã«å€æ
- ãšã¯ã¹ããŒãæã¯
SET NAMES 'utf8mb4';
ãæç€º - Excelã«èªã¿èŸŒããšãã¯ãUTF-8ïŒBOMä»ãïŒãã§ä¿å
ãã©ãã«è§£æ¶ã®ããã®ç·åãã§ãã¯ãªã¹ã
ãã§ãã¯é ç® | ç¶æ |
---|---|
character_set_* ããã¹ãŠ utf8mb4 ã | â |
collation_server ã utf8mb4_general_ci ã | â |
ããŒã¿ããŒã¹ã»ããŒãã«ã»ã«ã©ã ã«æåã³ãŒãæç€º | â |
ã¢ããªã±ãŒã·ã§ã³ã®éä¿¡æåã³ãŒãã utf8mb4 | â |
䜿çšç°å¢ïŒã¿ãŒããã«ã»ãšãã£ã¿ãªã©ïŒã®ãšã³ã³ãŒãã£ã³ã°ãUTF-8 | â |
次ã®ã»ã¯ã·ã§ã³ã§ã¯ããããŸã§ã®ãã€ã³ããç°¡æœã«ãŸãšãããšãšãã«ãä»åŸMySQLã§æ¥æ¬èªãå®å šã«æ±ãããã®ãã³ãããå±ãããŸããèšäºã®ç·ãŸãšããšããŠããã²ã掻çšãã ããã
7. ãŸãšã
MySQLã§æ¥æ¬èªãæ±ãããã«å¿ èŠãªèšå®ãšèãæ¹ãå確èª
MySQLã§æ¥æ¬èªãæ£ããæ±ãããã«ã¯ãããšãããã utf8
ã«ããŠããã°å€§äžå€«ããšããæã蟌ã¿ã§ã¯ãªããèšå®ã®äžè²«æ§ãšå
šäœã®æµããçè§£ããããšãéèŠã§ãã
æ¬èšäºã§è§£èª¬ããäž»èŠãã€ã³ãã®ããããïŒ
- æ¥æ¬èªãæååãããäž»ãªåå ã¯ã
latin1
ãªã©äžé©åãªæåã³ãŒãã®äœ¿çšããŸãã¯ã¯ã©ã€ã¢ã³ãã»ãµãŒããŒéã®èšå®äžäžèŽã - MySQLã®æåã³ãŒãèšå®ã¯
SHOW VARIABLES
ã³ãã³ãã§ç¢ºèªå¯èœã - æšå¥šæåã³ãŒãã¯
utf8mb4
ãããã¯UTF-8ã®å®å šçã§ãããçµµæåãæŒ¢åã®ç°äœåã«ã察å¿ã - èšå®ã¯3段éã§è¡ãããšãæãŸããïŒã¯ã©ã€ã¢ã³ãããµãŒããŒãããŒã¿ããŒã¹ã»ããŒãã«åäœã
- Dockerç°å¢ã§ã¯
command:
ãLANG
ã®æå®ãå¿ é ããã±ãŒã«ãšæåã³ãŒãã®äž¡æ¹ã調æŽããå¿ èŠãããã - ãã©ãã«ãçºçããå Žåã¯æ®µéçã«åå ãåãåããŠå¯ŸåŠãMySQLæ¬äœã ãã§ãªããã¿ãŒããã«ã»ã¢ããªã±ãŒã·ã§ã³ã»å€éšããŒã¿ãšã®ããåãã確èªãã€ã³ãã
ä»åŸã®éçšã§æèããããã€ã³ã
- æ°ããMySQLç°å¢ãæ§ç¯ããéã¯ãåææ®µéã§
utf8mb4
ãåæãšããèšèšãããã - ããŒã ãè€æ°ç°å¢ã§éçºãè¡ãå Žåã¯ãèšå®ãã¡ã€ã«ãæ¥ç¶ãã©ã¡ãŒã¿ãææåã»å ±æããã
- DockerãCI/CDç°å¢ã§ã¯ãèšå®ã®èªååïŒç°å¢å€æ°ãèšå®ãã¡ã€ã«ç®¡çïŒãéµã«ãªããŸãã
- ããŒã¿ã®ã€ã³ããŒãã»ãšã¯ã¹ããŒãæã«ã¯ãæåã³ãŒã倿ããŒã«ïŒiconvãnkfãªã©ïŒã®æŽ»çšãæ€èšãã
æåŸã«
MySQLã§æ¥æ¬èªãæ±ãç°å¢ã¯ãäžåºŠãã£ãããšæŽåããŠããã°ã以éã®éçšã»éçºãéåžžã«ã¹ã ãŒãºã«ãªããŸãã
ããªãæååãããã®ãããã©ããã©ãèšå®ãã¹ããããããã£ãŠããã°ããã©ãã«ãæªç¶ã«é²ããå®å®ããããŒã¿åŠçãå¯èœã§ãã
æ¬èšäºããããªãã®éçºç°å¢ãããå¿«é©ã§å®å¿ãªãã®ã«ããäžå©ãšãªãã°å¹žãã§ãã
8. ãããã質åïŒFAQïŒ
MySQLãšæ¥æ¬èªã«é¢ãããããããçåã解決ããŸã
Q1. MySQLã§æ¥æ¬èªãã???ããšè¡šç€ºãããŠããŸããŸããåå ã¯äœã§ããïŒ
A. ã???ããšè¡šç€ºãããäž»ãªåå ã¯ãæåã³ãŒãã®äžäžèŽã§ããããšãã°ãã¯ã©ã€ã¢ã³ãã utf8mb4
ã§éä¿¡ããæ¥æ¬èªãããµãŒããŒã latin1
ã§åãåããšæååããçºçããŸãã
æ¥ç¶æã« SET NAMES 'utf8mb4';
ãå®è¡ããããšã§ãå€ãã®å Žå解決ããŸãã
Q2. my.cnf
ã« utf8mb4
ãèšå®ããã®ã«ãåæ ãããŸããã
A. my.cnf
ãç·šéããã ãã§ã¯åæ ãããŸãããMySQLãµãŒããŒãåèµ·åããå¿
èŠããããŸãã
Linuxã§ã¯ sudo systemctl restart mysql
ãDockerç°å¢ã§ã¯ docker-compose down
â docker-compose up -d
ãå¿ããã«å®è¡ããŸãããã
Q3. æ¢åã®ããŒãã«ã§æ¥æ¬èªãæååãããŠããŸããä¿®æ£ã§ããŸããïŒ
A. å®å
šã«ä¿®åŸ©ããã®ã¯å°é£ã§ããã以äžã®æé ã§å¯Ÿå¿å¯èœã§ãã
- ããŒãã«æ§é ã確èªïŒ
SHOW CREATE TABLE
ïŒ - æåã³ãŒãã倿
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ãã ãããã§ã«ä¿åãããããŒã¿ãå£ããŠããå Žåã¯ãããã¯ã¢ããããã®åŸ©å
ãŸãã¯æåä¿®æ£ãå¿
èŠã«ãªãããšããããŸãã
Q4. Dockerã§MySQLã䜿ã£ãŠããŸãããæ¥æ¬èªå
¥åã§æååãããŸãã
A. MySQLã®èšå®ã«å ããDockerfile ã docker-compose.yml ã§ãã±ãŒã«èšå®ïŒLANG=ja_JP.UTF-8
ãªã©ïŒã远å ããå¿
èŠããããŸãã
ãŸããMySQLã³ã³ããã®èµ·åæã³ãã³ãã§ --character-set-server=utf8mb4
ãæç€ºçã«æå®ããŸãããã
Q5. utf8
ãš utf8mb4
ã¯ã©ãéãã®ã§ããïŒã©ã¡ãã䜿ãã¹ãïŒ
A. MySQLã® utf8
ã¯å®éã«ã¯3ãã€ãã®UTF-8äºææåããæ±ããŸãããäžæ¹ utf8mb4
ã¯4ãã€ã察å¿ã§ãçµµæåãäžéšã®æŒ¢åãæ£ããæ±ããŸãã
çŸåšã§ã¯ãäºææ§ãšå°æ¥æ§ã®èгç¹ãã utf8mb4
ãæšå¥šãããŸãã
Q6. Excelã§ãšã¯ã¹ããŒãããCSVãæååãããŸããã©ãããã°ïŒ
A. Excelã¯ããã©ã«ãã§ Shift_JIS ã BOMä»ãUTF-8 ã䜿ãå ŽåããããMySQLãšæåã³ãŒãããããããšããããŸãã
CSVãã¡ã€ã«ã UTF-8ã§ä¿åããããåã蟌ãéã« SET NAMES 'utf8mb4';
ãå®è¡ããŠMySQLåŽã®ãšã³ã³ãŒãã£ã³ã°ãåãããŠãã ããã
ãã®FAQãèªãã§ã解決ããªãå Žåã¯ãèšå®ã®ç¢ºèªãäžããèŠçŽãããéçºç°å¢ããšã«åæ§ç¯ããã®ãã²ãšã€ã®æ¹æ³ã§ãã
æè¡çãªèª²é¡ã«ã¯æ ¹æ°åŒ·ã察å¿ããããšããæ¥æ¬èªããŒã¿ãšã®æ£ããä»ãåãã«ã€ãªãããŸãã