كيفية جعل الخلية التعامل مع UTF-8 بشكل صحيح
سؤال
واحد من الردود السؤال الذي سألته أمس واقترح علي أن تأكد من قاعدة البيانات يمكن التعامل مع UTF-8 أحرف بشكل صحيح.كيف يمكن أن تفعل هذا مع الخلية ؟
المحلول
تحديث:
الجواب القصير - يجب أن تكون دائما تقريبا استخدام utf8mb4
محارف ، utf8mb4_unicode_ci
ترتيب.
تغيير قاعدة البيانات:
ALTER DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
انظر:
هارون التعليق على هذا الجواب كيفية جعل الخلية التعامل مع UTF-8 بشكل صحيح
تحويل دليل: https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html
الجواب الأصلية:
MySQL 4.1 وما فوق لديه مجموعة الأحرف الافتراضية من UTF-8.يمكنك التحقق من هذا في my.cnf
ملف, تذكر أن تعيين سواء العميل والخادم (default-character-set
و character-set-server
).
إذا كان لديك البيانات القائمة التي ترغب في تحويلها إلى UTF-8 ، تفريغ قاعدة البيانات الخاصة بك ، استيراده مرة أخرى كما UTF-8 التأكد من:
- استخدام
SET NAMES utf8
قبل الاستعلام/إدراج في قاعدة البيانات - استخدام
DEFAULT CHARSET=utf8
عند إنشاء جداول جديدة - عند هذه النقطة MySQL الخاص بك العميل و الخادم يجب أن يكون في UTF-8 (انظر
my.cnf
).تذكر أي اللغات التي تستخدمها (مثل PHP) يجب أن يكون UTF-8 كذلك.بعض إصدارات PHP واستخدام الخاصة بهم مكتبة عميل الخلية التي قد لا يكون UTF-8 علم.
إذا كنت لا ترغب في ترحيل البيانات الموجودة تذكر أن النسخ الاحتياطي الأولى!الكثير من غريب choping من البيانات يمكن أن يحدث عندما لا تسير الأمور كما هو مخطط لها!
بعض الموارد:
- كاملة UTF-8 للهجرة (cdbaby.com)
- المادة على UTF-8 جاهزية وظائف php (ملاحظة بعض هذه المعلومات قديمة)
نصائح أخرى
لجعل هذا "الدائم" ، my.cnf
:
[client]
default-character-set=utf8
[mysqld]
character-set-server = utf8
للتحقق ، انتقل إلى العميل وتظهر بعض المتغيرات:
SHOW VARIABLES LIKE 'character_set%';
تحقق من أن أنهم جميعا utf8
, إلا ..._filesystem
, التي ينبغي أن تكون binary
و ..._dir
, هذا نقطة في مكان ما في تركيب الخلية.
MySQL 4.1 وما فوق لديه مجموعة الأحرف الافتراضية التي المكالمات utf8
ولكن الذي هو في الواقع مجموعة فرعية فقط من UTF-8 (يسمح فقط ثلاث البايت الأحرف الصغيرة).
استخدام utf8mb4
كما charset إذا كنت ترغب في "الكامل" UTF-8.
الجواب القصير:استخدام utf8mb4
في 4 أماكن:
- بايت في جهاز العميل utf8 لا latin1/cp1251/الخ.
SET NAMES utf8mb4
أو أي شيء عند وضع العميل الاتصال إلى الخليةCHARACTER SET utf8mb4
على جميع الجداول/أعمدة-باستثناء الأعمدة بدقة ascii/hex/country_code/zip_code/الخ.<meta charset charset=UTF-8>
إذا كنت إخراج HTML.(نعم الإملائي مختلفة هنا.)
مزيد من المعلومات ;
UTF8 طول الطريق
الروابط أعلاه تقديم "مفصلة الكنسي الجواب هو مطلوب لمعالجة كل المخاوف".-- هناك حد مساحة في هذا المنتدى.
تحرير
بالإضافة إلى CHARACTER SET utf8mb4
تحتوي "جميع" في العالم حرفا ، COLLATION utf8mb4_unicode_520_ci
القول 'أفضل للجميع حول' ترتيب للاستخدام.(هناك أيضا التركية, الإسبانية, الخ, الترتيب بالنسبة لأولئك الذين يريدون الفروق الدقيقة في تلك اللغات.)
Charset خاصية قاعدة البيانات (الافتراضي) الجدول.هل يمكن أن يكون نظرة (الخلية الأوامر):
show create database foo;
> CREATE DATABASE `foo`.`foo` /*!40100 DEFAULT CHARACTER SET latin1 */
show create table foo.bar;
> lots of stuff ending with
> ) ENGINE=InnoDB AUTO_INCREMENT=252 DEFAULT CHARSET=latin1
وبعبارة أخرى;فإنه من السهل جدا للتحقق من قاعدة البيانات الخاصة بك محارف أو تغييره:
ALTER TABLE `foo`.`bar` CHARACTER SET utf8;
لتغيير الطابع تعيين الترميز إلى UTF-8 على قاعدة البيانات نفسها, اكتب الأمر التالي في الخلية> موجه.استخدام ALTER DATABASE
..محل DBNAME مع اسم قاعدة البيانات:
ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;
هذا هو نسخة مكررة من هذا السؤال كيفية تحويل كامل قاعدة بيانات MySQL characterset و جمع إلى UTF-8?
تابعت خافيير الحل ، ولكن أضفت بعض خطوط مختلفة في بلدي.cnf:
[myslqd]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8
وجدت هذه الفكرة هنا: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html في أول/المستخدم فقط التعليق على الجزء السفلي من الصفحة.يذكر أن تخطي تعيين شخصية العميل-المصافحة له بعض الأهمية.
هذه نصائح حول الخلية و UTF-8 قد تكون مفيدة.لسوء الحظ أنها لا تشكل الحل الكامل فقط شيوعا gotchas.
تعيين الخاص بك database collation
إلى UTF-8
ثم تطبيق table collation
قاعدة البيانات الافتراضي.
الجواب يمكنك تكوين من ضبط الخلية.في جوابي قد يكون شيء خرج من السياق ولكن هذا هو أيضا يعرف هو مساعدة لك.
كيفية تكوين Character Set
و Collation
.
للتطبيقات التي تخزن البيانات باستخدام الافتراضي الخلية مجموعة الأحرف و جمع (
latin1, latin1_swedish_ci
) ، أي تكوين خاص ينبغي أن تكون هناك حاجة.إذا التطبيقات تتطلب تخزين البيانات باستخدام مختلفة تعيين حرف أو ترتيب ، يمكنك تكوين مجموعة الأحرف المعلومات بعدة طرق:
- تحديد الإعدادات الشخصية في قاعدة البيانات الخاصة بنا. على سبيل المثال التطبيقات
أن استخدام قاعدة بيانات واحدة قد تتطلب
utf8
, بينما التطبيقات التي استخدام قاعدة بيانات أخرى قد تتطلب sjis. - تحديد الإعدادات الشخصية عند بدء تشغيل الملقم. يؤدي هذا الخادم إلى استخدام الإعدادات لجميع التطبيقات التي لا تجعل الآخرين الترتيبات.
- تحديد الإعدادات الشخصية في وقت التكوين, إذا كنت بناء الخلية من المصدر.يؤدي هذا الملقم لاستخدام معين الإعدادات لجميع التطبيقات دون الحاجة إلى تحديد لهم في بدء تشغيل الملقم.
الأمثلة الموضحة هنا السؤال إلى مجموعة utf8 مجموعة الأحرف هنا أيضا تعيين ترتيب أكثر فائدة(utf8_general_ci
جمع`).
تحديد الإعدادات الشخصية في قاعدة البيانات
CREATE DATABASE new_db
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
تحديد الإعدادات الشخصية في بدء تشغيل الملقم
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
تحديد الإعدادات الشخصية في الخلية التكوين الوقت
shell> cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
لمعرفة القيم من مجموعة الأحرف و ترتيب متغيرات النظام التي تنطبق على الاتصال الخاص بك, استخدام هذه البيانات:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
هذه قد تكون طويلة الجواب ولكن هناك شيء يمكنك استخدام.الأمل جوابي هو مفيد بالنسبة لك.للحصول على مزيد من المعلومات http://dev.mysql.com/doc/refman/5.7/en/charset-applications.html
SET NAMES UTF8
هذا أمر لا حيلة
اتصال قاعدة البيانات الى UTF-8
$connect = mysql_connect('$localhost','$username','$password') or die(mysql_error());
mysql_set_charset('utf8',$connect);
mysql_select_db('$database_name','$connect') or die(mysql_error());
مجموعة اتصال قاعدة البيانات الخاصة بك إلى UTF8:
if($handle = @mysql_connect(DB_HOST, DB_USER, DB_PASS)){
//set to utf8 encoding
mysql_set_charset('utf8',$handle);
}
كان قادرا على العثور على حل.ركض التالية كما هو محدد في http://technoguider.com/2015/05/utf8-set-up-in-mysql/
SET NAMES UTF8;
set collation_server = utf8_general_ci;
set default-character-set = utf8;
set init_connect = ’SET NAMES utf8′;
set character_set_server = utf8;
set character_set_client = utf8;