ในฐานะที่เป็น MySQL หรือ นักพัฒนา PHP เมื่อคุณก้าวพ้นขอบเขตที่สะดวกสบายของชุดอักขระภาษาอังกฤษเท่านั้นคุณจะพบว่าตัวเองเข้าไปพัวพันกับโลกแห่งการเข้ารหัส UTF-8 ที่แปลกประหลาดอย่างรวดเร็ว
รองพื้น UTF-8 ด่วนเมื่อก่อนหน้านี้ งาน เราเริ่มพบปัญหาการเข้ารหัสข้อมูลเมื่อแสดงประวัติของศิลปินจากทั่วทุกมุมโลก ในไม่ช้าก็เห็นได้ชัดว่ามีปัญหากับข้อมูลที่จัดเก็บเนื่องจากบางครั้งข้อมูลถูกเข้ารหัสอย่างถูกต้องและบางครั้งก็ไม่เป็นเช่นนั้น
สิ่งนี้ทำให้โปรแกรมเมอร์นำแพตช์ไปใช้งานบางครั้งก็ใช้ JavaScript บางครั้งก็ใช้เมตาแท็ก HTML charset บางครั้งก็ใช้ PHP และอื่น ๆ เร็ว ๆ นี้เราพบกับรายชื่อประวัติศิลปิน 600,000 รายการที่มีข้อมูลที่เข้ารหัสสองครั้งหรือสามครั้งโดยข้อมูลจะถูกจัดเก็บในรูปแบบที่แตกต่างกันขึ้นอยู่กับว่าใครเป็นผู้ตั้งโปรแกรมคุณสมบัติหรือติดตั้งโปรแกรม รังหนูเทคนิคคลาสสิก
อันที่จริงการสำรวจปัญหาการเข้ารหัสข้อมูล UTF-8 อาจเป็นประสบการณ์ที่น่าหงุดหงิดและน่าหงุดหงิด โพสต์นี้มีตำราอาหารที่กระชับสำหรับการแก้ไขปัญหา UTF-8 เหล่านี้เมื่อทำงานกับ PHP และ MySQL โดยเฉพาะโดยอาศัยประสบการณ์จริงและบทเรียนที่ได้เรียนรู้ (และด้วยความขอบคุณในบางส่วนสำหรับข้อมูลที่ค้นพบ ที่นี่ และ ที่นี่ ระหว่างทาง).
โดยเฉพาะอย่างยิ่งเราจะกล่าวถึงสิ่งต่อไปนี้ในโพสต์นี้:
php.ini
ไฟล์และ โค้ด PHP .my.ini
ไฟล์และอื่น ๆ ปัญหาที่เกี่ยวข้องกับ MySQL ที่ต้องระวัง (รวมถึง config mods ที่จำเป็นหากคุณใช้ สฟิงซ์ )สิ่งแรกที่คุณต้องทำคือแก้ไข php.ini
ของคุณ ไฟล์ที่จะใช้ UTF-8 เป็นชุดอักขระเริ่มต้น:
default_charset = 'utf-8';
(หมายเหตุ: คุณสามารถใช้ phpinfo()
ในภายหลังเพื่อตรวจสอบว่าได้ตั้งค่าอย่างถูกต้องแล้ว)
ตกลงเจ๋งดังนั้นตอนนี้ PHP และ UTF-8 ควรทำงานร่วมกันได้ดี ขวา?
ดีไม่ว่า ในความเป็นจริงไม่ได้ปิด
แม้ว่าการเปลี่ยนแปลงนี้จะช่วยให้มั่นใจได้ว่า PHP จะแสดงผล UTF-8 เป็นการเข้ารหัสอักขระ (ในการตอบสนองของเบราว์เซอร์ส่วนหัวประเภทเนื้อหา) คุณยังคงต้องทำการแก้ไขโค้ด PHP ของคุณจำนวนมากเพื่อให้แน่ใจว่าได้ประมวลผลอย่างถูกต้องและสร้าง UTF- 8 ตัวอักษร
ที่เกี่ยวข้อง: แนวทางปฏิบัติและเคล็ดลับที่ดีที่สุดของ PHP โดยนักพัฒนา ApeeScapeเพื่อให้แน่ใจว่าโค้ด PHP ของคุณเล่นได้ดีในแซนด์บ็อกซ์การเข้ารหัสข้อมูล UTF-8 นี่คือสิ่งที่คุณต้องทำ:
ตั้งค่า UTF-8 เป็นชุดอักขระสำหรับเอาต์พุตส่วนหัวทั้งหมดด้วยโค้ด PHP ของคุณ
กลยุทธ์การซื้อขายอัตโนมัติที่ได้ผล
ในทุกส่วนหัวเอาต์พุตของ PHP ให้ระบุ UTF-8 เป็นการเข้ารหัส:
header('Content-Type: text/html; charset=utf-8');
ระบุ UTF-8 เป็นประเภทการเข้ารหัสสำหรับ XML
function utf8_for_xml($string) { return preg_replace('/[^x{0009}x{000a}x{000d}x{0020}-x{D7FF}x{E000}-x{FFFD}]+/u', ' ', $string); }
ตัดอักขระที่ไม่รองรับออกจาก XML
เนื่องจากเอกสาร XML ไม่ยอมรับอักขระ UTF-8 ทั้งหมดคุณจึงต้องดึงอักขระดังกล่าวออกจาก XML ที่คุณสร้างขึ้น ฟังก์ชันที่มีประโยชน์สำหรับการทำสิ่งนี้ (ซึ่งฉันพบ ที่นี่ ) ดังต่อไปนี้:
$safeString = utf8_for_xml($yourUnsafeString);
วิธีใช้ฟังก์ชันนี้ในโค้ดของคุณมีดังนี้
htmlspecialchars
ระบุ UTF-8 เป็นชุดอักขระสำหรับเนื้อหา HTML ทั้งหมด
สำหรับเนื้อหา HTML ระบุ UTF-8 เป็นการเข้ารหัส:
htmlspecialchars($str, ENT_NOQUOTES, 'UTF-8')
ในรูปแบบ HTML ระบุ UTF-8 เป็นการเข้ารหัส:
default_charset
ระบุ UTF-8 เป็นการเข้ารหัสในการเรียกทั้งหมดไปที่ htmlspecialchars
เช่น .:
htmlentities
*บันทึก: ณ PHP 5.6.0, mysql_set_charset
ค่าถูกใช้เป็นค่าเริ่มต้น จาก PHP 5.4.0 UTF-8 เป็นค่าเริ่มต้น แต่ก่อนหน้า PHP 5.4.0 จะใช้ ISO-8859-1 เป็นค่าเริ่มต้น ดังนั้นจึงเป็นความคิดที่ดีที่จะระบุ UTF-8 อย่างชัดเจนเสมอเพื่อความปลอดภัยแม้ว่าอาร์กิวเมนต์นี้จะเป็นทางเลือกก็ตาม
โปรดทราบว่าสำหรับ UTF-8, $link = mysql_connect('localhost', 'user', 'password'); mysql_set_charset('utf8', $link);
และ mysql_set_charset
สามารถใช้แทนกันได้
ตั้งค่า UTF-8 เป็นชุดอักขระเริ่มต้นสำหรับการเชื่อมต่อ MySQL ทั้งหมด
ระบุ UTF-8 เป็นอักขระเริ่มต้นที่กำหนดให้ใช้เมื่อแลกเปลี่ยนข้อมูลกับฐานข้อมูล MySQL โดยใช้ mysqli::set_charset
:
เทคนิคการเอาใจใส่ลูกค้า
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'test'); /* check connection */ if (mysqli_connect_errno()) { printf('Connect failed: %s
', mysqli_connect_error()); exit(); } /* change character set to utf8 */ if (!$mysqli->set_charset('utf8')) { printf('Error loading character set utf8: %s
', $mysqli->error); } else { printf('Current character set: %s
', $mysqli->character_set_name()); } $mysqli->close();
โปรดทราบว่า ณ PHP 5.5.0, strlen
เลิกใช้งานแล้วและ iconv
ควรใช้แทน:
iconv_strlen
ใช้ฟังก์ชันการจัดการสตริงเวอร์ชันที่เข้ากันได้กับ UTF-8 เสมอ
มีฟังก์ชัน PHP หลายอย่างที่จะล้มเหลวหรืออย่างน้อยก็ไม่ทำงานตามที่คาดไว้หากการแสดงอักขระต้องการมากกว่า 1 ไบต์ (เช่นเดียวกับ UTF-8) ตัวอย่างคือ mbstring
ฟังก์ชันที่จะส่งคืนจำนวนไบต์แทนที่จะเป็นจำนวนอักขระ
มีสองตัวเลือกสำหรับจัดการกับสิ่งนี้:
my.ini
ฟังก์ชันที่พร้อมใช้งานโดยค่าเริ่มต้นด้วย PHP จะให้ฟังก์ชันเหล่านี้หลายเวอร์ชันที่เข้ากันได้กับหลายไบต์ (เช่น [client] default-character-set=UTF-8 [mysql] default-character-set=UTF-8 [mysqld] character-set-client-handshake = false #force encoding to uft8 character-set-server=UTF-8 collation-server=UTF-8_general_ci [mysqld_safe] default-character-set=UTF-8
ฯลฯ ) อย่างไรก็ตามโปรดจำไว้ว่าสตริงที่คุณระบุให้กับฟังก์ชันเหล่านี้จะต้องเข้ารหัสอย่างถูกต้อง
นอกจากนี้ยังมีไฟล์ my.ini
ส่วนขยายเป็น PHP (มีข้อมูลเกี่ยวกับการเปิดใช้งานและการกำหนดค่า ที่นี่ ). ส่วนขยายนี้มีชุดฟังก์ชันที่ครอบคลุมซึ่งรองรับการเข้ารหัสหลายไบต์อย่างเหมาะสม
ในด้าน MySQL / UTF-8 การปรับเปลี่ยนเป็น mysql> show variables like 'char%';
ไฟล์จำเป็นดังต่อไปนี้:
ตั้งค่าพารามิเตอร์การกำหนดค่าต่อไปนี้หลังจากแต่ละแท็กที่เกี่ยวข้อง:
| character_set_client | UTF-8 | character_set_connection | UTF-8 | character_set_database | UTF-8 | character_set_filesystem | binary | character_set_results | UTF-8 | character_set_server | UTF-8 | character_set_system | UTF-8 | character_sets_dir | /usr/share/mysql/charsets/
หลังจากทำการเปลี่ยนแปลงข้างต้นกับ latin1
ของคุณ รีสตาร์ท MySQL daemon ของคุณ
ในการตรวจสอบว่าทุกอย่างได้รับการตั้งค่าอย่างถูกต้องให้ใช้การเข้ารหัส UTF-8 ให้ดำเนินการค้นหาต่อไปนี้:
utf8mb4
ผลลัพธ์ควรมีลักษณะดังนี้:
set names UTF-8;
หากคุณเห็น sphinx.conf
ในรายการเหล่านี้โปรดตรวจสอบการกำหนดค่าของคุณอีกครั้งและตรวจสอบว่าคุณได้รีสตาร์ท mysql daemon อย่างถูกต้องแล้ว
MySQL UTF-8 เป็นการใช้งานชุดอักขระ UTF-8 แบบเต็มบางส่วน โดยเฉพาะการเข้ารหัส MySQL UTF-8 ใช้สูงสุด 3 ไบต์ในขณะที่ 4 ไบต์จำเป็นสำหรับการเข้ารหัสชุดอักขระ UTF-8 แบบเต็ม สิ่งนี้ใช้ได้สำหรับอักขระภาษาทั้งหมด แต่ถ้าคุณต้องการรองรับสัญลักษณ์ดาว (ซึ่งมีจุดรหัสอยู่ในช่วง U + 010000 ถึง U + 10FFFF) สิ่งเหล่านี้ต้องใช้การเข้ารหัสสี่ไบต์ซึ่งไม่รองรับใน MySQL UTF-8 ใน MySQL 5.5.3 สิ่งนี้ได้รับการแก้ไขด้วยการเพิ่มการสนับสนุนสำหรับไฟล์ utf8mb4 ชุดตัวอักษร ซึ่งใช้สูงสุดสี่ไบต์ต่ออักขระและด้วยเหตุนี้จึงสนับสนุนชุดอักขระ UTF-8 แบบเต็ม ดังนั้นหากคุณใช้ MySQL 5.5.3 หรือใหม่กว่าให้ใช้ charset_type = utf-8
แทน UTF-8 เป็นชุดอักขระฐานข้อมูล / ตาราง / แถวของคุณ มีข้อมูลเพิ่มเติม ที่นี่ .
หากไคลเอนต์ที่เชื่อมต่อไม่มีวิธีระบุการเข้ารหัสสำหรับการสื่อสารกับ MySQL หลังจากสร้างการเชื่อมต่อแล้วคุณอาจต้องรันคำสั่ง / เคียวรีต่อไปนี้:
sql_query_pre = SET CHARACTER_SET_RESULTS=UTF-8 sql_query_pre = SET NAMES UTF-8
เมื่อกำหนดขนาดของช่อง varchar เมื่อสร้างแบบจำลองฐานข้อมูลอย่าลืมว่าอักขระ UTF-8 อาจต้องการได้มากถึง 4 ไบต์ต่ออักขระ
ในไฟล์กำหนดค่า Sphinx ของคุณ (เช่น charset_table
):
ตั้งค่านิยามดัชนีของคุณให้มี:
my.ini
เพิ่มสิ่งต่อไปนี้ในนิยามแหล่งที่มาของคุณ:
ALTER SCHEMA `your-db-name` DEFAULT CHARACTER SET UTF-8;
รีสตาร์ทเครื่องยนต์และสร้างดัชนีทั้งหมดใหม่
หากคุณต้องการกำหนดค่าสฟิงซ์เพื่อให้ตัวอักษรเช่น C c ĆćĈĉĊċČčเทียบเท่าสำหรับวัตถุประสงค์ในการค้นหาคุณจะต้องกำหนดค่า mysql> show variables like 'char%';
(a.k.a. character folding) ซึ่งโดยพื้นฐานแล้วเป็นการจับคู่ความเท่าเทียมกันระหว่างอักขระ มีข้อมูลเพิ่มเติม ที่นี่ .
หากคุณมีฐานข้อมูล MySQL ที่เข้ารหัสเป็นภาษาละติน 1 อยู่แล้ววิธีการแปลง latin1 เป็น UTF-8 มีดังนี้
ตรวจสอบว่าคุณได้ทำการแก้ไขการตั้งค่าทั้งหมดใน mysqldump -u USERNAME -pDB_PASSWORD --opt --skip-set-charset --default-character-set=latin1 --skip-extended-insert DATABASENAME --tables TABLENAME > DUMP_FILE_TABLE.sql
ของคุณแล้ว ตามที่อธิบายไว้ข้างต้น
ดำเนินการคำสั่งต่อไปนี้:
mysqldump -u root --opt --skip-set-charset --default-character-set=latin1 --skip-extended-insert artists-database --tables tbl_artist > tbl_artist.sql
ผ่านบรรทัดคำสั่งตรวจสอบว่าทุกอย่างถูกตั้งค่าเป็น UTF-8 อย่างถูกต้อง
perl -i -pe 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=UTF-8/' DUMP_FILE_TABLE.sql
สร้างไฟล์ดัมพ์ด้วยการเข้ารหัส latin1 สำหรับตารางที่คุณต้องการแปลง:
mysql> source 'DUMP_FILE_TABLE.sql';
เช่น:
mysql> select count(*) from MY_TABLE where LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD);
ทำการค้นหาส่วนกลางและแทนที่ชุดอักขระในไฟล์ดัมพ์จาก latin1 เป็น UTF-8:
c คอร์ปอเรชั่น vs s คอร์ปอเรชั่น คำนิยาม
เช่นใช้ Perl:
create table temptable ( select * from MY_TABLE where LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD));
หมายเหตุสำหรับผู้ใช้ Windows: การเปลี่ยนสตริงชุดอักขระนี้ (จาก latin1 เป็น UTF-8) สามารถทำได้โดยใช้ find-and-replace ใน WordPad (หรือโปรแกรมแก้ไขข้อความอื่น ๆ เช่น vim) อย่าลืมบันทึกไฟล์ตามที่เป็นจริง (อย่าบันทึกเป็นไฟล์ Unicode txt!)
จากจุดนี้เราจะเริ่มยุ่งกับข้อมูลฐานข้อมูลดังนั้นจึงควรระมัดระวังในการสำรองฐานข้อมูลหากคุณยังไม่ได้ดำเนินการ จากนั้นเรียกคืนการถ่ายโอนข้อมูลลงในฐานข้อมูล:
alter table temptable modify temptable.ArtistName varchar(128) character set latin1;
ค้นหาระเบียนที่อาจแปลงไม่ถูกต้องและแก้ไขให้ถูกต้อง เนื่องจากอักขระที่ไม่ใช่ ASCII เป็นอักขระหลายไบต์ตามการออกแบบเราจึงสามารถค้นหาได้โดยการเปรียบเทียบความยาวไบต์กับความยาวอักขระ (กล่าวคือเพื่อระบุแถวที่อาจมีอักขระ UTF-8 ที่เข้ารหัสสองครั้งซึ่งจำเป็นต้องได้รับการแก้ไข)
ดูว่ามีระเบียนที่มีอักขระแบบหลายไบต์หรือไม่ (หากข้อความค้นหานี้ส่งกลับค่าศูนย์แสดงว่าไม่มีระเบียนใด ๆ ที่มีอักขระแบบหลายไบต์ในตารางของคุณและคุณสามารถดำเนินการต่อในขั้นตอนที่ 8 ได้)
alter table temptable modify temptable.ArtistName blob; alter table temptable modify temptable.ArtistName varchar(128) character set UTF-8;
คัดลอกแถวที่มีอักขระหลายไบต์ลงในตารางชั่วคราว:
delete from MY_TABLE where LENGTH(MY_FIELD) = CHAR_LENGTH(MY_FIELD);
แปลงอักขระ UTF-8 ที่เข้ารหัสสองครั้งเป็นอักขระ UTF-8 ที่เหมาะสม
นี่เป็นเรื่องยุ่งยากเล็กน้อย สตริงที่เข้ารหัสสองครั้งคือสตริงที่เข้ารหัสอย่างถูกต้องเป็น UTF-8 อย่างไรก็ตาม MySQL ทำให้เราชอบที่จะแปลงมันผิดพลาด (จากสิ่งที่มัน ความคิด เป็นภาษาละติน 1) ถึง UTF-8 อีกครั้ง เมื่อเราตั้งค่าคอลัมน์เป็นการเข้ารหัส UTF-8 การแก้ไขปัญหานี้จึงต้องใช้กระบวนการสองขั้นตอนซึ่งเรา 'หลอก' MySQL เพื่อป้องกันไม่ให้ทำสิ่งนี้ให้เรา 'ชอบ'
วิธีเขียนข้อกำหนดซอฟต์แวร์
ขั้นแรกเราตั้งค่าประเภทการเข้ารหัสสำหรับคอลัมน์กลับเป็น latin1 ดังนั้นจึงลบการเข้ารหัสสองครั้ง:
เช่น .:
replace into MY_TABLE (select * from temptable);
หมายเหตุ: อย่าลืมใช้ประเภทฟิลด์ที่ถูกต้องสำหรับตารางของคุณ ในตัวอย่างด้านบนสำหรับตารางของเราประเภทฟิลด์ที่ถูกต้องสำหรับ 'ArtistName' คือ varchar (128) แต่ฟิลด์ในตารางของคุณอาจเป็นข้อความหรือประเภทอื่นก็ได้ อย่าลืมระบุให้ถูกต้อง!
ปัญหาคือตอนนี้ถ้าเราตั้งค่าการเข้ารหัสคอลัมน์กลับเป็น UTF-8 MySQL จะเรียกใช้การเข้ารหัสข้อมูลแบบ latin1 ถึง UTF-8 ให้เราอีกครั้งและเราจะกลับไปที่จุดเริ่มต้น เพื่อหลีกเลี่ยงสิ่งนี้เราเปลี่ยนประเภทคอลัมน์เป็นหยดและจากนั้นเราตั้งค่าเป็น UTF-8 สิ่งนี้ใช้ประโยชน์จากข้อเท็จจริงที่ว่า MySQL จะไม่พยายามเข้ารหัสหยด ดังนั้นเราจึงสามารถ 'หลอก' การแปลงชุดอักขระ MySQL เพื่อหลีกเลี่ยงปัญหาการเข้ารหัสซ้ำซ้อน
เช่น .:
|_+_|
(อีกครั้งตามที่ระบุไว้ข้างต้นอย่าลืมใช้ประเภทฟิลด์ที่ถูกต้องสำหรับตารางของคุณ)
ลบแถวที่มีอักขระไบต์เดียวออกจากตารางชั่วคราว:
|_+_|
แทรกแถวคงที่กลับเข้าไปในตารางเดิมอีกครั้ง (ก่อนทำสิ่งนี้คุณอาจต้องการเรียกใช้การเลือกบางส่วนบนสิ่งที่อยากได้เพื่อตรวจสอบว่าดูเหมือนว่าได้รับการแก้ไขอย่างถูกต้องเช่นเดียวกับการตรวจสอบความมีสุขภาพจิต)
ตรวจสอบข้อมูลที่เหลือและหากจำเป็นให้ทำซ้ำขั้นตอนในขั้นตอนที่ 7 (อาจจำเป็นเช่นหากข้อมูลถูกเข้ารหัสสามครั้ง) ข้อผิดพลาดเพิ่มเติม (ถ้ามี) อาจแก้ไขได้ง่ายที่สุดด้วยตนเอง
อีกสิ่งหนึ่งที่ต้องจำและตรวจสอบคือไฟล์ซอร์สโค้ดไฟล์ทรัพยากรและอื่น ๆ ทั้งหมดได้รับการบันทึกอย่างถูกต้องด้วยการเข้ารหัสข้อมูล UTF-8 มิฉะนั้นอักขระ 'พิเศษ' ในไฟล์เหล่านี้อาจไม่ได้รับการจัดการอย่างถูกต้อง
ตัวอย่างเช่นใน Netbeans คุณสามารถคลิกขวาที่โปรเจ็กต์ของคุณเลือกคุณสมบัติจากนั้นใน 'แหล่งที่มา' คุณจะพบตัวเลือกการเข้ารหัสข้อมูล (โดยปกติจะมีค่าเริ่มต้นเป็น UTF-8 แต่ก็คุ้มค่าที่จะตรวจสอบ)
หรือใน Windows Notepad ให้ใช้ตัวเลือก“ บันทึกเป็น…” ในเมนูไฟล์แล้วเลือกตัวเลือกการเข้ารหัส UTF-8 ที่ด้านล่างของกล่องโต้ตอบ (โปรดทราบว่าตัวเลือก“ Unicode” ที่ Notepad มีให้นั้นแท้จริงแล้วคือ UTF-16 ดังนั้นจึงไม่ใช่สิ่งที่คุณต้องการ)
แม้ว่ามันจะค่อนข้างน่าเบื่อ แต่การใช้เวลาทำตามขั้นตอนเหล่านี้เพื่อจัดการปัญหาการเข้ารหัสข้อมูล MySQL และ PHP UTF-8 อย่างเป็นระบบสามารถช่วยคุณประหยัดเวลาและความเศร้าโศกได้อย่างมาก ในระยะยาววิธีการที่เป็นระเบียบประเภทนี้เหนือกว่าแนวโน้มที่พบบ่อยเกินไปเพียงแค่ทำการแพตช์ระบบต่อไป
คู่มือนี้หวังเป็นอย่างยิ่งว่าจะเน้นย้ำถึงความสำคัญของการพิจารณาคำจำกัดความของชุดอักขระเมื่อตั้งค่าสภาพแวดล้อมของโครงการตั้งแต่แรกและทำงานในสภาพแวดล้อมโครงการซอฟต์แวร์ที่อธิบายการเข้ารหัสอักขระอย่างเหมาะสมในการจัดการข้อความและสตริง
ที่เกี่ยวข้อง: ก่อนที่จะดีบัก PHP ที่ใช้งานไม่ได้โปรดดูรายการข้อผิดพลาดที่พบบ่อยที่สุด 10 ข้อที่นักพัฒนา PHP ทำUTF-8 กำหนดโดยมาตรฐาน Unicode คือการเข้ารหัสอักขระ 8 บิตที่สามารถจัดเก็บอักขระ Unicode ได้ เข้ากันได้กับ ASCII
UTF ย่อมาจาก Unicode Transformation Format ในขณะที่ส่วนต่อท้าย“ 8” หมายถึงการใช้บล็อก 8 บิตเพื่อแสดงอักขระ
ในการแทรกอักขระ Unicode ใน MySQL คุณต้องสร้างตารางที่รองรับ Unicode เลือกการตั้งค่าการเข้ารหัส / การเรียงลำดับที่เหมาะสมและระบุชุดอักขระในการเชื่อมต่อ MySQL จากนั้นคุณสามารถดำเนินการต่อและใช้โค้ด PHP เพื่อแทรก Unicode ได้ตามต้องการ