- 1 1. හැඳින්වීම
- 2 2. MySQL අක්ෂර සමුදාය කියන්නේ මොනවාද? මූලික කරුණු අවබෝධය
- 3 3. වත්මන් අක්ෂර සමුදාය පරීක්ෂා කිරීමේ ක්රමය
- 4 4. MySQL අකුරු සැකසුම වෙනස් කිරීමේ ක්රමය
- 5 5. අක්ෂර සමුහය වෙනස් කිරීමෙන් පසු ගැටළු නිරාකරණය
- 6 6. How Character Set Changes Affect Performance
- 7 7. Recommended Settings (Best Practices)
- 8 8. නිතර අසන ප්රශ්න (FAQ)
- 8.1 utf8 සහ utf8mb4 අතර වෙනස්කම කුමක්ද?
- 8.2 MySQL අක්ෂර සමුහය වෙනස් කිරීම දත්ත අහිමි වීමට හේතු වේද?
- 8.3 එය සිදු වූ විට mojibake (අකුරු විකෘතිකරණය) කෙසේ සකස් කරන්නේද?
- 8.4 latin1 සිට utf8mb4 වෙත පරිවර්තනය කිරීමේ අවදානම් කුමනවාද?
- 8.5 utf8mb4 වෙත මාරු කිරීම කාර්ය සාධනයට බලපාද?
- 8.6 මට කුමන එක භාවිතා කළ යුතුද: utf8mb4_general_ci නැතහොත් utf8mb4_unicode_ci?
- 8.7 utf8mb4 වෙත මාරු කිරීමෙන් පසු විමසුම් මන්දගාමී වේද?
- 8.8 සාරාංශය
- 8.9 අවසාන සටහන්
1. හැඳින්වීම
MySQL අක්ෂර සමුදාය වෙනස් කිරීමට ඔබට අවශ්ය විය හැකි හේතු
දත්ත ගබඩා අක්ෂර සමුදාය යනු පෙළ දත්ත කෙලින්ම කේතනය කර ගබඩා කිරීම සහ සැකසීම තීරණය කරන වැදගත් සැකසුමකි. MySQL හි, පෙරනිමි අක්ෂර සමුදාය සාමාන්යයෙන් latin1 වේ, එය ජපන් භාෂා හෝ වෙනත් විශේෂ අක්ෂර සමඟ වැඩ කරන විට ගැටළු ඇති කරයි. විශේෂයෙන් දත්ත මාරු කිරීම හෝ පද්ධති ප්රමිතීකරණය කිරීමේදී, සුදුසු අක්ෂර සමුදායක් වෙත මාරු වීම අත්යවශ්ය වේ.
පොදු ගැටළු සහ ඒවායේ හේතු
MySQL අක්ෂර සමුදායන්ට සම්බන්ධ සාමාන්ය ගැටළු පහත පරිදි වේ.
- Mojibake (අකුරු විකෘතිකරණය)
utf8සහlatin1එකම පරිසරයේ මිශ්ර වේ- සේවාදායක සහ සේවාදායක (client) අක්ෂර සමුදා සැකසුම් නොගැලපේ
- සෙවීමේදී ඇතිවන ගැටළු
- සමානකරණ (collation) වෙනස්කම් නිසා, අපේක්ෂිත සෙවුම් ප්රතිඵල ලබා නොදේ
- අනුක්රමය ඔබේ අපේක්ෂාවට නොගැලපේ
- දත්ත මාරු කිරීමේදී ඇතිවන ගැටළු
utf8mb4භාවිතා නොකිරීම නිසා Emoji සහ විශේෂ සංකේත සුරැකීමට නොහැක- අපනයන/ආනයන කාලයේ අක්ෂර සමුදා පරිවර්තනය නිසි ලෙස සිදු නොවේ
ලිපියේ ඉලක්ක සහ ව්යුහය
මෙම ලිපිය MySQL අක්ෂර සමුදා වෙනස්කම් පිළිබඳ සම්පූර්ණ විස්තරයක්, මූලික සංකල්ප සිට සැකසුම් වෙනස් කිරීමේ ක්රම සහ ගැටළු විසඳීම දක්වා ලබා දෙයි.
සාරාංශය
- MySQL අක්ෂර සමුදා පිළිබඳ මූලික දැනුම
- වත්මන් අක්ෂර සමුදාය පරීක්ෂා කිරීමේ ක්රමය
- MySQL අක්ෂර සමුදාය වෙනස් කිරීමේ ක්රමය
- වෙනස් කිරීමෙන් පසු ගැටළු විසඳීම
- අක්ෂර සමුදා වෙනස්කම් කාර්ය සාධනයට ඇති බලපෑම
- නිර්දේශිත සැකසුම් (හොඳම ක්රියාමාර්ග)
- FAQ (නිතර අසන ප්රශ්න)
මෙම මාර්ගෝපදේශය කියවීමෙන්, ඔබ MySQL අක්ෂර සමුදා පිළිබඳ අවබෝධය ගැඹුරු කරගනිමින් නිවැරදි සැකසුම් තෝරා පොදු ගැටළු වලින් වැළැක්විය හැක.
2. MySQL අක්ෂර සමුදාය කියන්නේ මොනවාද? මූලික කරුණු අවබෝධය
අක්ෂර සමුදාය කියන්නේ මොනවාද?
අක්ෂර සමුදාය (Character Set) යනු අක්ෂර들을 ඩිජිටල් දත්ත ලෙස ගබඩා කිරීම සහ සැකසීම සඳහා භාවිතා කරන නීති කට්ටලයකි. උදාහරණයක් ලෙස, ජපන් අක්ෂර “あ” ගබඩා කරන විට, UTF-8 එය E3 81 82 බයිට් අනුක්රමයක් ලෙස නියෝජනය කරයි, එත් Shift_JIS 82 A0 ලෙස භාවිතා කරයි.
MySQL හි, ඔබට දත්ත ගබඩා හෝ වගුව මට්ටමේ විවිධ අක්ෂර සමුදා නියම කළ හැක. සුදුසු අක්ෂර සමුදායක් තෝරා ගැනීමෙන් mojibake වැළැක්වීමට සහ ජාත්යන්තරීකරණය පහසු කර ගැනීමට හැකියාව ලැබේ.
පොදු අක්ෂර සමුදා
| Character Set | Characteristics | Use Case |
|---|---|---|
utf8 | UTF-8 up to 3 bytes | Does not support some special characters (such as emoji) |
utf8mb4 | UTF-8 up to 4 bytes | Supports emoji and special characters (recommended) |
latin1 | ASCII-compatible | Used in older systems |
Collation කියන්නේ මොනවාද?
Collation යනු අක්ෂර සමුදායක් තුළ දත්ත සැසඳීම සහ අනුක්රම කිරීම සඳහා භාවිතා කරන නීති කට්ටලයකි. උදාහරණයක් ලෙස, “A” සහ “a” එකම අක්ෂර ලෙස සැලකේද, සහ අනුක්රමය කෙසේ නියම වේද යන දේ මෙය නියම කරයි.
සාමාන්යයෙන් භාවිතා වන Collations
| Collation | Description |
|---|---|
utf8_general_ci | Case-insensitive, suitable for general use |
utf8_unicode_ci | Unicode-based collation (recommended) |
utf8mb4_bin | Binary comparison (use when exact matches are required) |
utf8 සහ utf8mb4 අතර වෙනස්කම්
MySQL හි utf8 ඇත්තටම එක් අක්ෂරයක් සඳහා බයිට් 3ක් පමණක් ගබඩා කළ හැකි බැවින්, Emoji හෝ විශාල CJK අක්ෂර වැනි විශේෂ අක්ෂර සමහරක් ගබඩා කළ නොහැක. එයට විරුද්ධව, utf8mb4 එක් අක්ෂරයක් සඳහා බයිට් 4ක් දක්වා සහය දක්වයි; ඒ නිසා නවීන යෙදුම් utf8mb4 භාවිතා කිරීමට නිර්දේශ කරයි.
| Character Set | Max Bytes | Emoji Support | Recommendation |
|---|---|---|---|
utf8 | 3 bytes | ❌ Not supported | ❌ Not recommended |
utf8mb4 | 4 bytes | ✅ Supported | ✅ Recommended |
utf8 සිට utf8mb4 වෙත මාරු විය යුතු හේතු
- ඉදිරි අනුකූලතාව : නවීන පද්ධති
utf8mb4වෙත වැඩි වශයෙන් ප්රමිතීකරණය කරමින් පවති. - විශේෂ අක්ෂර සහ Emoji සුරැකීම :
utf8mb4සමඟ, SNS පළ කිරීම් සහ පණිවුඩ යෙදුම් වල දත්ත ආරක්ෂිතව කළමනාකරණය කළ හැක. - අන්තර්ජාතිකරණය : බහුභාෂා පද්ධති සඳහා, mojibake අවදානම අඩු කරයි.
සාරාංශය
- අක්ෂර සමුදාය දත්ත කෙසේ සුරැකේ සහ සැකසෙයි යන්න තීරණය කරයි.
- Collation අක්ෂර කෙසේ සැසඳේ යන්න තීරණය කරයි.
- MySQL හි
utf8සීමා කර ඇති 3 බයිට් පමණයි, එබැවින්utf8mb4නිර්දේශ කරයි. utf8mb4_unicode_ciසාමාන්ය භාවිතයට සාමාන්යයෙන් නිර්දේශිත collation එකකි.
3. වත්මන් අක්ෂර සමුදාය පරීක්ෂා කිරීමේ ක්රමය
MySQL අක්ෂර සමුදාය වෙනස් කිරීමට පෙර, වත්මන් සැකසුම් පරීක්ෂා කිරීම අත්යවශ්යය. අක්ෂර සමුදායන් දත්ත ගබඩා, වගුව, තීරුව (column) මට්ටමින් සකස් කළ හැකි බැවින්, ඔබට වෙනස්කම් අවශ්ය ස්ථානය නිශ්චිතව තේරුම් ගැනීම වැදගත් වේ.
වත්මන් අක්ෂර සමුදාය පරීක්ෂා කිරීමේ ක්රමය
MySQL සේවාදායක-පරාස අක්ෂර සමුදාය පරීක්ෂා කිරීම
පළමුව, සම්පූර්ණ MySQL සේවාදායකය සඳහා අකුරු සැකසුම් සහ collation සැකසුම් පරීක්ෂා කරන්න.
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
උදාහරණ ප්රතිදානය:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
+--------------------------+----------------------------+
ඩේටාබේස් එකකට අකුරු සැකසුම පරීක්ෂා කිරීම
විශේෂිත ඩේටාබේස් එකක අකුරු සැකසුම පරීක්ෂා කිරීමට, පහත විමසුම භාවිතා කරන්න.
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'database_name';
උදාහරණ ප්රතිදානය
+----------------+----------------------+----------------------+
| SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------+----------------------+----------------------+
| my_database | utf8mb4 | utf8mb4_unicode_ci |
+----------------+----------------------+----------------------+
ටේබල් එකක අකුරු සැකසුම පරීක්ෂා කිරීම
විශේෂිත ටේබල් එකක අකුරු සැකසුම පරීක්ෂා කිරීමට මෙය භාවිතා කරන්න.
SHOW CREATE TABLE table_name;
උදාහරණ ප්රතිදානය
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
පරීක්ෂණ සටහන්
DEFAULT CHARSET=latin1→utf8mb4නොවේ, එබැවින් වෙනස්කමක් අවශ්යයිCOLLATE=latin1_swedish_ci→utf8mb4_unicode_ciවෙත මාරු වීම සාමාන්යයෙන් වඩාත් සුදුසුයි
කොලම් එකක අකුරු සැකසුම පරීක්ෂා කිරීම
කොලම් මට්ටමේදී අකුරු සැකසුම පරීක්ෂා කිරීමට, පහත SQL විමසුම ධාවනය කරන්න.
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_NAME = 'table_name';
උදාහරණ ප්රතිදානය
+-------------+--------------------+----------------------+
| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |
+-------------+--------------------+----------------------+
| name | latin1 | latin1_swedish_ci |
| email | utf8mb4 | utf8mb4_unicode_ci |
+-------------+--------------------+----------------------+
මෙම උදාහරණයේදී, name කොලම latin1 භාවිතා කරයි, එබැවින් එය utf8mb4 වෙත වෙනස් කිරීම නිර්දේශ කෙරේ.
සාරාංශය
- MySQL අකුරු සැකසුම් සේවාදායකය, ඩේටාබේස්, ටේබල්, කොලම් යන මට්ටම්වලදී සකස් කෙරේ.
- එක් එක් මට්ටමේදී අකුරු සැකසුම පරීක්ෂා කිරීමෙන්, ඔබට නිවැරදි වෙනස්කම් යෙදිය හැකිය.
SHOW VARIABLESසහSHOW CREATE TABLEවැනි විධාන භාවිතා කරමින් වත්මන් සැකසුම් සම්පූර්ණයෙන් තේරුම් ගන්න.

4. MySQL අකුරු සැකසුම වෙනස් කිරීමේ ක්රමය
MySQL අකුරු සැකසුම නිවැරදිව වෙනස් කිරීමෙන්, ඔබට mojibake වැළැක්වීමට සහ බහු භාෂා දත්ත හොඳින් සහාය දැක්වීමට හැකියි.
මෙම කොටසේදී, අපි සේවාදායක පුළුල්, ඩේටාබේස්, ටේබල්, සහ කොලම් යන මට්ටම්වල සැකසුම් යාවත්කාලීන කිරීම පැහැදිලි කරමු.
සේවාදායක පුළුල් අකුරු සැකසුම මාරු කිරීම
සේවාදායක පුළුල් අකුරු සැකසුම මාරු කිරීමට, ඔබට MySQL සැකසුම් ගොනුව (my.cnf හෝ my.ini) සංස්කරණය කළ යුතුයි.
පියවර
- සැකසුම් ගොනුව විවෘත කරන්න
- Linux හි:
bash sudo nano /etc/mysql/my.cnf Windows හි: wp:list /wp:list
C:\ProgramData\MySQL\MySQL Server X.X\my.iniවිවෘත කරන්න
- අකුරු සැකසුම් එකතු කරන්න හෝ වෙනස් කරන්න
mysqldකොටස යටතේ පහත පේළි එකතු කරන්න හෝ යාවත්කාලීන කරන්න.[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
- MySQL නැවත ආරම්භ කරන්න
sudo systemctl restart mysql
Windows හි:
net stop MySQL && net start MySQL
- වෙනස්කම තහවුරු කරන්න
SHOW VARIABLES LIKE 'character_set_server';
දත්ත සමුදා මට්ටමේ අක්ෂර සමුහය වෙනස් කිරීම
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
වෙනස්කම තහවුරු කරන්න
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = 'mydatabase';
වගුව මට්ටමේ අක්ෂර සමුහය වෙනස් කිරීම
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
වෙනස්කම තහවුරු කරන්න
SHOW CREATE TABLE users;
තීරුව මට්ටමේ අක්ෂර සමුහය වෙනස් කිරීම
ALTER TABLE users MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
වෙනස්කම තහවුරු කරන්න
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'users';
වෙනස්කම පසු තහවුරු කිරීම සහ පිටපත් ගැනීමේ වැදගත්කම
අක්ෂර සමුහය වෙනස් කිරීමෙන් පසු දත්ත අඛණ්ඩතාව රැක ගැනීමට, මෙම පියවර අනුගමනය කරන්න.
ඔබේ දත්ත පිටපත් ගන්න
mysqldump -u root -p --default-character-set=utf8mb4 mydatabase > backup.sql
සැකසුම් නැවත පරීක්ෂා කරන්න
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
SHOW CREATE TABLE users;
පරීක්ෂණ දත්ත ඇතුළත් කර පෙන්වන්න
INSERT INTO users (name, email) VALUES ('Test User', 'test@example.com');
SELECT * FROM users;
සාරාංශය
- සේවාදායක-පුරා අක්ෂර සමුහ වෙනස් කිරීම :
my.cnfසංස්කරණය කරcharacter-set-server=utf8mb4ලෙස සකසන්න - දත්ත සමුදා අක්ෂර සමුහ වෙනස් කිරීම :
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 - වගුව අක්ෂර සමුහ වෙනස් කිරීම :
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 - තීරුව අක්ෂර සමුහ වෙනස් කිරීම :
ALTER TABLE users MODIFY COLUMN name VARCHAR(255) CHARACTER SET utf8mb4 - වෙනස්කම් කිරීමෙන් පසු, සැමවිටම සැකසුම් තහවුරු කර ඔබේ දත්ත පරීක්ෂා කරන්න
5. අක්ෂර සමුහය වෙනස් කිරීමෙන් පසු ගැටළු නිරාකරණය
MySQL අක්ෂර සමුහය වෙනස් කිරීමෙන් පසු, පද්ධතිය නිසි ලෙස ක්රියා නොකිරීම හෝ ගබඩා කළ දත්ත විකෘති වීම වැනි අවස්ථා ඔබට මුහුණ දිය හැක.
මෙම කොටසේ, සාමාන්ය ගැටළු සහ ඒවා සවිස්තරාත්මකව සලසා ගැනීම පිළිබඳ විස්තර කරමු.
මොජිබේක් (Mojibake) හේතු සහ ඒවා සවිස්තරාත්මකව සලසා ගැනීම
අක්ෂර සමුහය වෙනස් කිරීමෙන් පසු mojibake (අක්ෂර විකෘතිය) සිදුවේ නම්, පහත හේතු සාමාන්ය වේ.
| Cause | How to Check | Solution |
|---|---|---|
| The client character set setting differs | SHOW VARIABLES LIKE 'character_set_client'; | Run SET NAMES utf8mb4; |
| Existing data was stored using a different encoding | SELECT HEX(column_name) FROM table_name; | Use CONVERT() or re-export the data |
| The connection encoding is not correct | Connect with mysql --default-character-set=utf8mb4 | Adjust the client-side character set configuration |
| Application settings (PHP/Python, etc.) are incorrect | mysqli_set_charset($conn, 'utf8mb4'); | Standardize the application’s character set settings |
සැකසුම #1: ගනුදෙනුකරු (client) අක්ෂර සමුහය නිවැරදිව සකසන්න
SET NAMES utf8mb4;
සැකසුම #2: පවතින දත්ත නිවැරදිව පරිවර්තනය කරන්න
UPDATE users SET name = CONVERT(CAST(CONVERT(name USING latin1) AS BINARY) USING utf8mb4);
latin1 සිට utf8mb4 වෙත පරිවර්තනය කිරීමේ සටහන්
ආරක්ෂිත ක්රියාවලිය
- වත්මන් දත්ත පිටපත් ගන්න
mysqldump -u root -p --default-character-set=latin1 mydatabase > backup.sql
- දත්ත සමුදා අක්ෂර සමුහය වෙනස් කරන්න
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- වගුවේ අක්ෂර සමුහය වෙනස් කරන්න
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- දත්ත නැවත ආයාත කරන්න
mysql -u root -p --default-character-set=utf8mb4 mydatabase < backup.sql
වෙනස්කමෙන් පසු දත්ත සෙවිය නොහැකි වීම
කේස් #1: LIKE සෙවීම ක්රියා නොකරයි
SELECT * FROM users WHERE name COLLATE utf8mb4_unicode_ci LIKE '%Tanaka%';
කේස් #2: අනුපිළිවෙළ වෙනස් විය
SELECT * FROM users ORDER BY BINARY name;
යෙදුම්-පාර්ශ්වීය පියවර
PHP සඳහා
mysqli_set_charset($conn, 'utf8mb4');
Python (MySQL Connector) සඳහා
import mysql.connector
conn = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="mydatabase",
charset="utf8mb4"
)
For Node.js (MySQL2)
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'mydatabase',
charset: 'utf8mb4'
});
Summary
- Post-change issues generally fall into three categories: client settings, data conversion, and application settings.
- To prevent mojibake, standardize the client character set using
SET NAMES utf8mb4. - Watch for LIKE search and sort order changes, and specify
COLLATEwhen needed. - Set
utf8mb4in your application as well to avoid encoding mismatches.
6. How Character Set Changes Affect Performance
When changing the MySQL character set to utf8mb4, there are several performance considerations, such as increased storage usage and index limitations.
In this section, we explain the impact and the best countermeasures.
Increased Storage Usage
Compared to MySQL’s utf8, utf8mb4 can use up to 4 bytes per character,
so the overall table size may increase.
Max bytes per character by character set
| Character Set | Max Bytes per Character |
|---|---|
latin1 | 1 byte |
utf8 | 3 bytes |
utf8mb4 | 4 bytes |
For example, with utf8, VARCHAR(255) is up to 765 bytes (255×3),
but with utf8mb4, it becomes up to 1020 bytes (255×4).
Countermeasure
ALTER TABLE posts MODIFY COLUMN title VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Increased Index Size
MySQL enforces a maximum index key length.
After switching to utf8mb4, index entries become larger, and you may hit the limit—making indexes unusable.
Check index impact
SHOW INDEX FROM users;
Example error
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes
Countermeasure
ALTER TABLE users MODIFY COLUMN email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Impact on Query Performance
Changing the character set to utf8mb4 may affect query execution speed.
Operations that may be affected
LIKEsearches over large datasetsORDER BYprocessing- JOIN query performance
Countermeasure
CREATE INDEX idx_name ON users(name(100));
Memory Usage and Buffer Tuning
With utf8mb4, memory usage may increase.
Recommended settings
[mysqld]
innodb_buffer_pool_size = 1G
query_cache_size = 128M
Summary
- Switching to
utf8mb4increases storage usage. - Index sizes increase and may exceed limits.
- Query performance can be affected.
- Because memory usage may increase, buffer sizes may need tuning.
7. Recommended Settings (Best Practices)
By setting MySQL character sets appropriately, you can maintain data integrity while optimizing performance.
In this section, we present recommended MySQL character set configurations and explain key points for an optimal setup.
Recommended MySQL Character Set Configuration
| Item | Recommended Setting | Reason |
|---|---|---|
| Character Set | utf8mb4 | Supports all Unicode characters including emoji and special characters |
| Collation | utf8mb4_unicode_ci | Case-insensitive and suitable for multilingual systems |
| Storage Engine | InnoDB | Good balance of performance and consistency |
| Indexed string length | VARCHAR(191) | Avoids exceeding MySQL index limits |
Recommended my.cnf Settings
1. MySQL Server Character Set Settings
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect='SET NAMES utf8mb4'
skip-character-set-client-handshake
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_buffer_pool_size = 1G
query_cache_size = 128M
2. Client-Side Character Set Settings
[client]
default-character-set = utf8mb4
Recommended Database Settings
CREATE DATABASE mydatabase DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
To change an existing database character set:
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Recommended Table Settings
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
පවත්නා වගු සඳහා අක්ෂර සමුහය වෙනස් කිරීම
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4_general_ci සහ utf8mb4_unicode_ci අතර වෙනස්කම්
| Collation | Characteristics | Use Case |
|---|---|---|
utf8mb4_general_ci | Faster comparisons, but less accurate | Performance-focused systems |
utf8mb4_unicode_ci | Unicode-standard, more accurate comparisons | General-purpose use (recommended) |
✅ බහුභාෂා සහයෝගය හෝ නිවැරදි වර්ගීකරණය අවශ්ය නම්, utf8mb4_unicode_ci තෝරන්න.
දර්ශක (Index) සුදානම
CREATE FULLTEXT INDEX idx_fulltext ON articles(content);
සාරාංශය
utf8mb4+utf8mb4_unicode_ciසංයෝජනය නිර්දේශිතය.- සේවාදායක සැකසුම් (
my.cnf) සහ සම්බන්ධතා අක්ෂර සමුහයන් සම්මත කරන්න. - දත්ත ගබඩා, වගුව, සහ තීරුව මට්ටමින්
utf8mb4පැහැදිලිව නියම කරන්න. - දර්ශක යතුරු දිග සීමා වලින් වැළැක්වීමට
VARCHAR(191)භාවිතා කරන්න. - නිවැරදි සැසඳීම් සඳහා
utf8mb4_unicode_ciභාවිතා කරන්න.
8. නිතර අසන ප්රශ්න (FAQ)
MySQL අක්ෂර සමුහ වෙනස් කිරීම පිළිබඳ සාමාන්ය වාස්තු විශේෂ ප්රශ්න මෙන්න.
දෝෂ හසුරවීම සහ හොඳම සැකසුම් තේරීම ගැනද අපි කවරා කරමු.
utf8 සහ utf8mb4 අතර වෙනස්කම කුමක්ද?
SHOW VARIABLES LIKE 'character_set_server';
MySQL අක්ෂර සමුහය වෙනස් කිරීම දත්ත අහිමි වීමට හේතු වේද?
mysqldump -u root -p --default-character-set=utf8mb4 mydatabase > backup.sql
එය සිදු වූ විට mojibake (අකුරු විකෘතිකරණය) කෙසේ සකස් කරන්නේද?
UPDATE users SET name = CONVERT(CAST(CONVERT(name USING latin1) AS BINARY) USING utf8mb4);
latin1 සිට utf8mb4 වෙත පරිවර්තනය කිරීමේ අවදානම් කුමනවාද?
ALTER DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
utf8mb4 වෙත මාරු කිරීම කාර්ය සාධනයට බලපාද?
ALTER TABLE users MODIFY COLUMN email VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
මට කුමන එක භාවිතා කළ යුතුද: utf8mb4_general_ci නැතහොත් utf8mb4_unicode_ci?
| Collation | Characteristics | Use Case |
|---|---|---|
utf8mb4_general_ci | Faster comparisons, but less accurate | Performance-focused systems |
utf8mb4_unicode_ci | Unicode-standard, accurate comparisons | General-purpose use (recommended) |
utf8mb4 වෙත මාරු කිරීමෙන් පසු විමසුම් මන්දගාමී වේද?
CREATE FULLTEXT INDEX idx_fulltext ON articles(content);
සාරාංශය
✅ utf8mb4 නිර්දේශිතය. එහි සීමා හේතුවෙන් utf8 නිර්දේශිත නොවේ.
✅ වෙනස්කම් කිරීමට පෙර, SHOW VARIABLES භාවිතයෙන් සැකසුම් පරීක්ෂා කරන්න.
✅ mojibake වැළැක්වීමට නිර්යාත/ආයාත ක්රියාපටිපාටිය භාවිතා කරන්න.
✅ දර්ශක සීමා ගැන සැලකිල්ලට ගෙන, අවශ්ය තැන්වල VARCHAR(191) භාවිතා කරන්න.
✅ කාර්ය සාධනය සඳහා, සුදුසු දර්ශක එක් කරන්න.
අවසාන සටහන්
MySQL අක්ෂර සමුහය වෙනස් කිරීම සරල සැකසුම් වෙනස් කිරීමක් නොව, එය දත්ත අඛණ්ඩතාවය සහ කාර්ය සාධනය මත බලපාන වැදගත් කාර්යයකි.
නිවැරදි සැකසුම් සහ ක්රියාපටිපාටියන් අනුගමනය කිරීමෙන්, ඔබට utf8mb4 වෙත ආරක්ෂිතව සහ ප්රභාවීව මාරු විය හැක.
🔹 මෙම ලිපියේ පියවර අනුගමනය කර ඔබේ අක්ෂර සමුහය නිවැරදිව සැකසන්න! 🔹


