có thể đại diện cho mọi ký hiệu trong bộ ký tự Unicode, nằm trong khoảng từ U+000000 đến U+10FFFF. Đó là 1.114.112 biểu tượng có thể. (Không phải tất cả các điểm mã Unicode này đều đã được gán ký tự, nhưng điều đó không ngăn UTF-8 có thể mã hóa chúng. )
UTF-8 là mã hóa có độ rộng thay đổi; . Các biểu tượng có giá trị điểm mã số thấp hơn được mã hóa bằng ít byte hơn. Bằng cách này, UTF-8 được tối ưu hóa cho trường hợp phổ biến khi các ký tự ASCII và các ký tự khác (có điểm mã nằm trong khoảng từ U+000000 đến U+00FFFF) được sử dụng — trong khi vẫn cho phép các ký hiệu thiên văn (có điểm mã nằm trong khoảng từ U+010000 đến U
Trong khi viết về mã hóa ký tự bên trong của JavaScript, tôi nhận thấy rằng không có cách nào để chèn ký hiệu U+1D306 TETRAGRAM FOR CENTER (
Vì các ký hiệu thiên thể (có các điểm mã nằm trong khoảng từ U+010000 đến U+10FFFF), mỗi ký hiệu bao gồm bốn byte trong UTF-8, nên bạn không thể lưu trữ chúng bằng triển khai
Như đã trình bày ở trên, hành vi này có thể dẫn đến mất dữ liệu, nhưng tệ hơn là có thể dẫn đến các lỗ hổng bảo mật. Dưới đây là một số ví dụ, tất cả đều được phát hiện sau khi xuất bản bài viết này
May mắn thay, MySQL 5. 5. 3 (phát hành vào đầu năm 2010) đã giới thiệu một mã hóa mới có tên là
Tạo bản sao lưu của tất cả cơ sở dữ liệu trên máy chủ bạn muốn nâng cấp. An toàn là trên hết
Nâng cấp máy chủ MySQL lên v5. 5. 3+ hoặc yêu cầu quản trị viên máy chủ của bạn làm điều đó cho bạn
Thay đổi bộ ký tự và thuộc tính đối chiếu của cơ sở dữ liệu, bảng và cột để sử dụng
Điều tương tự cũng xảy ra với các khóa chỉ mục. Công cụ lưu trữ
Phần 10. 1. 11 của MySQL 5. 5 Tài liệu tham khảo có thêm một số thông tin về điều này
Đảm bảo cũng đặt bộ ký tự máy khách và máy chủ. Tôi có phần sau trong tệp cấu hình MySQL của mình (
Ghi chú. Bộ ký tự và đối chiếu mặc định cũng có thể được cấu hình ở một số cấp độ khác
Sau khi nâng cấp máy chủ MySQL và thực hiện các thay đổi cần thiết được giải thích ở trên, hãy đảm bảo sửa chữa và tối ưu hóa tất cả các cơ sở dữ liệu và bảng. Tôi đã không làm điều này ngay sau khi nâng cấp (tôi không nghĩ là cần thiết, vì thoạt nhìn mọi thứ có vẻ hoạt động tốt), và gặp phải một số lỗi kỳ lạ trong đó các câu lệnh
Bạn có thể chạy các truy vấn MySQL sau cho mỗi bảng mà bạn muốn sửa chữa và tối ưu hóa
May mắn thay, điều này có thể dễ dàng được thực hiện trong một lần sử dụng tiện ích dòng lệnh
Điều này sẽ nhắc mật khẩu của người dùng root, sau đó tất cả các bảng trong tất cả các cơ sở dữ liệu sẽ được sửa chữa và tối ưu hóa
Chào bạn. Tôi là Mathias. Tôi làm việc trên Chrome DevTools và công cụ JavaScript V8 tại Google. HTML, CSS, JavaScript, Unicode, hiệu suất và bảo mật khiến tôi phấn khích. Theo dõi tôi trên Twitter, Mastodon và GitHub
Bình luậnDavid Higgins đã viết trên.
Mathias viết hay đấy. Bạn cũng có thể thoát các ký hiệu Unicode thành một số loại phiên bản đã được làm sạch trước khi thêm chúng vào cơ sở dữ liệu. e. g.
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
4 → mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
17Mathias đã viết trên.
Điều đó đi ngược lại các nguyên tắc bình thường hóa. Và nếu bạn muốn sử dụng dữ liệu ở định dạng khác không hỗ trợ các thực thể ký tự HTML thì sao?
maxw3st đã viết trên.
Cảm ơn bạn rất nhiều vì tài liệu này kỹ lưỡng. Có vẻ như việc cập nhật các bảng và cơ sở dữ liệu hiện tại của tôi sẽ rất khó khăn, nhưng việc thêm các bảng và cơ sở dữ liệu mới sẽ rất nhanh sau khi tôi làm theo hướng dẫn kết nối/máy khách/máy chủ và cập nhật các tệp cấu hình. Nói chung, điểm tuyệt vời về việc tăng bộ ký tự có sẵn. Cảm ơn bạn
Tôi Và Tôi đã viết trên.
Mục đích của
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
18 là gì?Tại sao bạn sử dụng
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
19, vốn đã là giá trị mặc định vì mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
20?Mathias đã viết trên.
Mặc dù các câu hỏi của bạn có thể hơi nằm ngoài phạm vi của bài viết này, nhưng tôi sẽ trả lời chúng theo sự hiểu biết tốt nhất của tôi
Mục đích của
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
18 là gì?
khiến máy chủ bỏ qua thông tin bộ ký tự do máy khách gửi (e. g. nếu khách hàng yêu cầu kết nối trong
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9, nó vẫn sẽ sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0). Bằng cách sử dụng nó, bạn có thể yên tâm rằng bộ ký tự máy chủ mặc định sẽ được sử dụng mọi lúcTại sao bạn sử dụng
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
19, vốn đã là giá trị mặc định vì mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
20?
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
02 cho biết bộ ký tự mà máy khách sẽ sử dụng để gửi các câu lệnh SQL đến máy chủ, tôi. e. bộ ký tự kết nối. đặt bộ ký tự máy chủ. Để sử dụng đúng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0, bạn cần đảm bảo rằng máy khách, máy chủ và kết nối đều được đặt thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0Đó là sự hiểu biết của tôi về các cài đặt này. Nếu bạn nghĩ rằng điều này là sai, tôi đánh giá cao một sự làm rõ. Thanks
Tôi Và Tôi đã viết trên.
Bạn đã kiểm tra tác dụng của
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
18 chưa? . 1. x khách hàng của tôi vẫn có thể thay đổi bộ ký tự, bất kể tôi đã viết tùy chọn này như thế nào (với mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
32, với mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
33, với mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
34 thay vì mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
35). Và tại sao khách hàng không thể thay đổi bộ ký tự cho kết nối của chính mình?mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
28 không phải là giá trị duy nhất bạn có thể đặt (không có mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
37) trong ____12_______38 (vâng, ____12_______39 cũng vậy, nhưng bây giờ nó không quan trọng). Đây cũng là giá trị mặc định cho tất cả các cài đặt bộ ký tự khác mà bạn không thay đổi rõ ràng (trong phiên của khách hàng, cho cơ sở dữ liệu, bảng, cột, v.v. ). Nói cách khác, (gần như) tất cả các mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
40 khác sẽ kế thừa từ giá trị này. Vì vậy, giá trị mặc định cho kết nối của khách hàng (mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
41, mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
42 và mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
43) sẽ luôn là giá trị này. Bạn không cần sử dụng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
37 trừ khi bạn muốn giá trị mặc định của kết nối khách hàng của bạn khác với giá trị được xác định trong mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
28Mathias đã viết trên.
Đặt
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
18 (hoặc sử dụng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
47) là cách duy nhất tôi có thể khiến mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
48 hiển thị dưới dạng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49 thay vì mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
50 khi thực hiện truy vấn mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
51. Trừ khi có cách tốt hơn để đạt được hiệu ứng tương tự, tôi e rằng không thể bỏ qua cài đặt nàyCảm ơn bạn đã chỉ ra cài đặt
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
37 là không cần thiết — Tôi đã xóa nó ngay bây giờ. Vui lòng cho tôi biết nếu ví dụ mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
05 có thể được tối ưu hóa hơn nữaTôi Và Tôi đã viết trên.
Để đặt đối chiếu của kết nối thành
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
54 thay vì mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
55, tôi có thể thực hiện việc này thành công bằng cách sử dụng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
56. Nhưng bạn chỉ cần sử dụng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
54 cho mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
58, nếu không, bạn có thể sử dụng mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
55 nhanh hơn như hướng dẫn nói. https. // nhà phát triển. mysql. com/doc/refman/5. 5/en/charset-unicode-sets. htmlĐể sử dụng đúng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0, bạn cần đảm bảo rằng máy khách, máy chủ và kết nối đều được đặt thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0
Không thật sự lắm. Tất nhiên khách hàng phải nói UTF-8. Đối với MySQL, bạn chỉ cần hai thứ. cài đặt cho kết nối máy khách của bạn và cài đặt cho các trường chuỗi.
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
28 chỉ là giá trị mặc định để tạo cơ sở dữ liệu nếu bạn không đặt bộ ký tự trong câu lệnh mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
63. Giá trị của cơ sở dữ liệu chỉ là giá trị mặc định cho các bảng của nó nếu bạn không đặt nó trong mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
64. Giá trị của bảng chỉ là giá trị mặc định cho các trường chuỗi nếu bạn không nói điều gì đó đặc biệt cho các trường. Chỉ bây giờ cả bộ ký tự và đối chiếu đều có mục đích thực sự để lưu trữ các giá trị và so sánh các chuỗi, v.v. Điểm thứ hai là giá trị của kết nối. MySQL cần nó để giải mã đầu vào của bạn một cách chính xác và để mã hóa kết quả. (Có thể bỏ qua mã hóa lại nếu kết nối và các trường sử dụng cùng một giá trị bộ ký tự. ) Xem ba chương phụ đầu tiên của https. // nhà phát triển. mysql. com/doc/refman/5. 5/en/cú pháp bảng mã. html (các câu chính nằm ở cuối các chương này) và https. // nhà phát triển. mysql. com/doc/refman/5. 5/en/kết nối bộ ký tự. htmlkết luận của tôi là. bạn có thể để nguyên các giá trị mặc định của máy chủ. Chỉ cần chỉ định giá trị cho các trường của bạn (hoặc giá trị mặc định cho bảng hoặc cơ sở dữ liệu của bạn nếu bạn không muốn đặt giá trị này theo từng trường). Và sử dụng
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
02 hoặc mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
66 trong PHP hoặc một cái gì đó tương tự sau mỗi lần kết nối với máy chủ MySQL. Đó là tất cả những gì bạn cần. Đừng dựa vào các giá trị mặc định của máy chủPatricio đã viết trên.
Bài viết rất hay Mathias, điều này cũng làm tôi ngạc nhiên một thời gian trước. Ai đã quyết định đặt tên cho bộ ký tự kia là
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9?. sTôi nghĩ sẽ an toàn hơn nhiều nếu không tin tưởng bất kỳ bộ ký tự mặc định nào được đặt trong cấu hình máy chủ và đảm bảo rằng ứng dụng của bạn đang đặt chính xác, bất cứ khi nào ứng dụng tạo/sửa đổi bảng và cơ sở dữ liệu cũng như mở các kết nối mới
Peter van Dijk đã viết trên.
Nếu bạn thực sự cần
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
68 sau những thay đổi này, thì đó là lỗi và bạn nên báo cáoBinyamin đã viết trên.
@Mathias, tôi đã làm theo các bước của bạn để thay đổi MySQL 5. 5. 25 thành
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0, nhưng tiếc là SQL trả vềLỗi #1064 – Bạn có lỗi trong cú pháp SQL của mình;
…khi tôi chạy truy vấn
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
…và với
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
71, toàn bộ trang web trả về Lỗi 500; . Nhật ký MySQL không hiển thị bất kỳ lỗi nàoVới
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 trang web hoạt động tốt. Bất kỳ đề xuất? . 5. 25aMathias đã viết trên.
Lỗi 500 rất có thể không liên quan gì đến bản thân MySQL, mà liên quan đến mã phía máy chủ kết nối với nó hoặc ở nơi khác trong mã của bạn. Hãy xem xét kỹ hơn các trang dẫn đến lỗi và cố gắng tìm hiểu xem chúng đang làm gì khác với các trang khác
Tôi đang sử dụng MySQL 5. 5. 25a cũng vậy, với các cài đặt chính xác này và mọi thứ đều hoạt động hoàn hảo
Binyamin đã viết trên.
Nó đã hoạt động sau khi phát hiện ra một lỗi Webmin với
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
18 và sửa nó với mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
74Lạ là máy chủ cũng trả về lỗi 500 vì một số loại hàng MySQL là
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
75. Sau khi tôi thay đổi loại thành mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
76, lỗi đã biến mất và mã hóa $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 hiện hoạt động tốtMathias đã viết trên.
Vấn đề
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
78 có lẽ là kết quả của những gì được mô tả trong, phải không?Binyamin đã viết trên.
Tôi không chắc về điều đó, vì trong một số trường hợp, hàng
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
78 sẽ gây ra Lỗi 500 ngay cả khi hàng đó có giá trị ký tự nhỏ và thay vào đó, việc sử dụng con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
1 sẽ khắc phục lỗi đó. Có lẽ nó liên quan đến MySQL 5. 5. lỗi 25ArunMohan đã viết trên.
Tôi vẫn nhận được
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
81Nhưng tôi có thể chèn các ký tự đó thông qua ứng dụng khách MySQL của mình (SqlYog)…
Richard đã viết trên.
Điều gì về hiệu suất và sử dụng bộ nhớ?
Mathias đã viết trên.
Tôi không biết về việc sử dụng bộ nhớ, nhưng hiệu suất của
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 chậm hơn so với 3 byte của # For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9. Tôi nghi ngờ sự khác biệt là không đáng kể, mặc dù tôi muốn xem một số con sốJon T. đã viết trên.
Bạn có đang sử dụng bộ ký tự
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 của MySQL trong cơ sở dữ liệu của mình không? Neil Martin đã viết trên.
Tôi đã tìm thấy nhiều tài nguyên tuyên bố cung cấp các giải pháp để sử dụng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 với MySQL, nhưng tất cả chúng đều không đầy đủ. Tôi đã đọc bài viết của bạn và áp dụng các thay đổi cấu hình được đề xuất và mọi thứ đã hoạt động. Công việc tuyệt vời; Deron Meranda đã viết trên.
Nếu bạn đang sử dụng Python với mô-đun MySQLpy phổ biến để kết nối cơ sở dữ liệu của mình, bạn sẽ cần áp dụng một bản vá nhỏ cho mã nguồn python để nó nhận ra bộ ký tự
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 mới. Cho đến khi bản vá này chính thức được thực hiện trong mã ngược dòng, hãy xem bản vá Pastebin nhỏRoland Franssen đã viết trên.
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
87 làm cho nó hoạt động với tôi trên MySQL 5. 5. 28CodeKingPlusPlus đã viết trên.
Còn việc thay đổi cài đặt đối chiếu cho JDBC thì sao? . Tôi có thể chạy các truy vấn tốt bên trong cơ sở dữ liệu của mình nhưng tôi nhận được ngoại lệ sau từ mã Java của mình
java.sql.SQLException: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
Tôi không thể tìm ra cách thay đổi
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
88 thành mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
89Chuỗi kết nối của tôi là
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
Bạn đã giải được
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
90 của mình chưa? Robert đã viết trên.
Cảm ơn bạn rất nhiều, tôi đã tìm kiếm một giải pháp trong gần một năm
Pawel đã viết trên.
Nếu tôi tình cờ gặp một đống POO cần được chèn vào cơ sở dữ liệu, tôi sẽ nhớ bài viết của bạn. )
Julia Neystadt đã viết về.
Cảm ơn rất nhiều cho bài viết của bạn. Thật không may, tôi đã làm theo tất cả các hướng dẫn và tôi vẫn gặp sự cố
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
0Đây là vấn đề tương tự được báo cáo trước đó
Bất kỳ ý tưởng?
Mathias đã viết trên.
và Bạn có thể nhận được ngoại lệ đó vì trình điều khiển JDBC (kết nối giữa Java và cơ sở dữ liệu của bạn) không nhận ra bộ ký tự
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0. Hãy thử sử dụng trình điều khiển JDBC có hỗ trợ $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 — Trình kết nối MySQL/J 5. 1. 13 (hoặc phiên bản mới hơn) chẳng hạnJulia Neystadt đã viết về.
Cảm ơn rất nhiều vì đã trả lời nhanh. Thật không may, điều này không giúp tôi. Trình kết nối MySQL của tôi là 5. 1. 18
Nhưng tôi đã chú ý rằng phiên bản DB của tôi là 5. 5. 19-nhật ký. Mặt khác, tất cả các định nghĩa
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 được đặt chính xácmysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
1Giúp đỡ của bạn được đánh giá rất cao
Julia
Julia Neystadt đã viết về.
Tôi đã giải quyết vấn đề của mình bằng cách nâng cấp phiên bản MySQL Connector/J lên 5. 1. 22
Michael đã viết trên.
Cảm ơn vì bài viết của bạn, nó đã giúp tôi rất nhiều
Đây là những suy nghĩ của tôi và một số thông tin bổ sung có thể hữu ích và. http. //thông tin. michael-simon. eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/
Bạn phải có
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
94 trong mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 và mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
96 trong kết nối JDBC của mình. Tùy thuộc vào phiên bản Trình kết nối MySQL/J của bạn, bạn cũng cần phải có mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
97 hoặc không, xem bài viết của tôiItay đã viết trên.
Cảm ơn rất nhiều vì bài viết tuyệt vời. Tôi đã làm tất cả các bước nhưng tôi vẫn thấy các dấu chấm hỏi nơi các ký tự 4 byte sẽ hiển thị. Tôi đang thiếu gì?
Jamie đã viết trên.
Tôi nhận thấy rằng phpMyAdmin không xử lý được
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0. Các ký tự 4 byte hiện có hiển thị dưới dạng dấu chấm hỏi và cố gắng chèn ký tự 4 byte dường như chèn bốn dấu hỏi thực tế vào cơ sở dữ liệu. Bật nhật ký mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
99 và xem phpMyAdmin đang làm gì, tôi nhận thấy nó đang đặt bộ ký tự thành # For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 mỗi lần. Nó được mã hóa cứng trong dòng 1303 của # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
01mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2Thay đổi nó thành
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 sẽ giải quyết được vấn đề, mặc dù đây là một bản hack nhưng bạn cần nhớ thực hiện thay đổi này mỗi khi bạn nâng cấp phpMyAdminNgoài ra, nếu bạn muốn chắc chắn sắp xếp chính xác các kết quả, bạn có thể đặt đối chiếu kết nối Máy chủ trên trang đầu của phpMyAdmin thành
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49Mathias đã viết trên.
Thanks. Bạn có thể muốn thêm thông tin đó vào vé lỗi phpMyAdmin tương ứng. http. //nguồnforge. net/p/phpmyadmin/bugs/3619/
Paul đã viết trên.
Ở đầu bài viết của bạn, bạn thực sự nên đề cập đến phiên bản MySQL áp dụng cho phiên bản này vì phiên bản trong Debian Squeeze là 5. 1 và điều đó quá cũ để có
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 rõ ràng. Đã dành nhiều thời gian để viết một chương trình để cập nhật các bảng MySQL của tôi, v.v. và sau đó thấy rằng tôi không thể không cập nhật gói. bài viết của bạn là công cụ tốt mặc dù. . -)cmr đã viết trên.
Xin chào các bạn, tôi đã thử ở trên. Tôi đã khởi động lại máy chủ MySQL nhưng đầu ra vẫn như thế này
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
3Đây là những gì
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
05 của tôi trông giống nhưmysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4Tôi đã xem cài đặt máy chủ mặc định và không thấy đề cập đến các biến trên đối với tệp
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38Tôi không thể lưu
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
4 nhưng tôi có thể lưu các ký tự như # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
08, # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
09 và # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
10Mathias đã viết trên.
Bạn có chắc chắn rằng tệp
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 mà bạn đang chỉnh sửa là tệp được tải không? mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
5Trên máy của tôi, bản in này
Các tùy chọn mặc định được đọc từ các tệp sau theo thứ tự nhất định
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
6
Đảm bảo tệp cấu hình bạn đang lưu vào được liệt kê. Ngoài ra, hãy kiểm tra tất cả các tệp khác được tải và đảm bảo rằng chúng không ghi đè cài đặt của bạn
cmr đã viết trên.
Tôi đã chuyển
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 sang # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
13 và nó hiện đang hoạt động. Cảm ơn rất nhiềuCập nhật. Tôi dường như không thể thêm ký tự vào cơ sở dữ liệu
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
7Câu lệnh sql
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
8Tôi đã thử chạy lệnh này
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
9Đầu ra cho biết "0 hàng bị ảnh hưởng"
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
0Tôi đoán rằng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 không được áp dụng cho hàng của tôiNhưng khi tôi chạy như sau
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
1Điều gì khác có thể xảy ra?
Cập nhật. Đã tìm thấy nó. tôi đã mất tích
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
2Cảm ơn vì bài viết tuyệt vời
Binyamin đã viết trên.
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
15 trong MySQL 5. 5. 3 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 được hỗ trợ kể từ MySQL 5. 5. 3Tại sao bạn lại sử dụng
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
15 trong # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
18 và # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
19?Mathias đã viết trên.
Tôi nghĩ rằng chỉ có tùy chọn dòng lệnh bị xóa, không phải biến. Một thử nghiệm nhanh xác nhận điều này. xóa các biến này khỏi tệp cấu hình sẽ ảnh hưởng đến kết quả
Với các cài đặt này
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
…Tôi nhận được những kết quả này
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
4Không có phần
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
18 và # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
19 thì kết quả đã khác# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
5Mihai đã viết trên.
bài viết rất tốt. Chúng tôi đã biết về công thức pha chế này có tên là
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9, nhưng bạn cung cấp cơ chế để giải quyết vấn đề này một cách chính xácJef Vlamings đã viết trên.
Thanks. Chắc chắn là lời giải thích rõ ràng nhất về cách định cấu hình
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 ngoài kiaSteve Hibbert đã viết về.
Về nơi duy nhất tôi có thể tìm thấy có cách chính xác để thiết lập
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
48 trong 5. 6. 15. Cảm ơn rất nhiềuHS viết tiếp.
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
6Đó là những gì tôi có trong
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 dưới # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
26. Tôi đang thiếu một cái gì đó hoặc làm điều gì đó sai? . 6. 16-nhật kýHS viết tiếp.
Sau khi suy nghĩ rất nhiều, đây là những cài đặt tốt nhất mà tôi có thể tìm ra để chạy mọi thứ với
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
7Khi chạy
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
8tôi hiểu rồi
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
9câu hỏi của tôi là
- Làm cách nào tôi cũng có thể đặt hệ thống sử dụng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0? . 5 và WHM. Hoặc nó sẽ là một ý tưởng tồi? - Có điều gì khác mà tôi nên làm để buộc hoàn toàn sử dụng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 không? - Có điều gì sai với đoạn mã trên vào ngày
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 không?
Thanks
P. S. Với cấu hình trên trong
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38, tôi không nhận được BẤT KỲ loại cảnh báo hay lỗi nào nữa khi kiểm tra thông báo lỗi MySQL. Một lưu ý nữa là mình đang chạy MySQL mới nhất từ WHM. 5. 6. Máy chủ cộng đồng MySQL 16-log (GPL)Mathias đã viết trên.
Tất cả những câu hỏi đó đã được trả lời trong bài viết trên. Tôi khuyên bạn nên đọc nó
RobertG đã viết trên.
Thay vì giảm kích thước cột từ
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
32 xuống # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
33, bạn đã thử đặt tùy chọn # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
34 của MySQL chưa? . nơi đây. Chris đã viết trên.
Cảm ơn vì đã viết bài này. Nếu bất cứ ai đang thực hiện việc di chuyển này với Django, đừng quên thêm
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
0…đến đối tượng
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
35 trong tệp cài đặt của bạn. Hy vọng điều này sẽ tiết kiệm thời gian cho người khácSerge đã viết trên.
Chỉ một câu hỏi - tại sao bạn thích
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49? Mathias đã viết trên.
Xem câu trả lời Stack Overflow này để biết sự khác biệt giữa
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
38, # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
39 và # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
40Tâm đã viết trên.
Xin chào các bạn, mình đã làm theo cách thiết lập ở trên, có vẻ như tất cả đều ổn, nhưng khi tôi chèn một
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
41 vào MySQL, nó báo lỗi 1062Bảng và cột này được sử dụng
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
42[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
1…Sau đó tôi tìm hiểu nếu thay đổi để sử dụng
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
43 thay vì # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
42 thì chèn hàng thứ hai mà không có bất kỳ lỗi nào, vậy có đề xuất nào để khắc phục điều này nếu tiếp tục sử dụng # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
42 không? HS viết tiếp.
Bạn có thấy rằng có một đối chiếu
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
46 không? . Bất kỳ ý tưởng? Cập nhật. https. // nhà phát triển. mysql. com/doc/refman/5. 6/en/charset-collation-names. html nói
Tên đối chiếu Unicode có thể bao gồm số phiên bản để cho biết phiên bản của Thuật toán đối chiếu Unicode (UCA) mà đối chiếu dựa trên đó. Các đối chiếu dựa trên UCA không có số phiên bản trong tên sử dụng các phím trọng số
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
48 UCA. Tên đối chiếu chẳng hạn như # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
49 dựa trên UCA 5. 2. 0 phím trọng lượng
Nghe có vẻ như
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
50 là viết tắt của tiêu chuẩn ngôn ngữ chứ không phải MySQL thích? . https. // lỗi. mysql. com/lỗi. php?id=9604Có vẻ như MySQL sẽ không cập nhật nội dung Unicode được cho là để theo kịp các tiêu chuẩn vì có vẻ như điều đó có nghĩa là khách hàng của họ phải cập nhật nội dung của cơ sở dữ liệu hiện tại của họ. Sau đó, họ đã tạo đối chiếu mới, theo kịp tiêu chuẩn Unicode. Và phiên bản họ có sẵn là v5. 2. 0, đây là cái nào. http. //www. unicode. org/Công khai/UCA/5. 2. 0/phím. txt
Sau đó, có vẻ như sẽ tốt hơn nếu gắn bó với tiêu chuẩn Unicode thực sự, tôi. e.
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
46?Có cách nào để biên dịch MySQL 5 không. 6 bằng cách sử dụng các phím trọng lượng UCA có sẵn mới nhất (v7. 0. 0 tại thời điểm viết)?
Allan Wallace đã viết trên.
Bài viết hay — mặc dù
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
37 có thể phù hợp hơn cho một số nhiệm vụ nhất định, vì việc phân biệt chữ hoa chữ thường có thể là một vấn đề trong một số ngữ cảnh nhất định hoặc khi việc sử dụng trọng âm trong ngôn ngữ làm thay đổi nghĩa của từ. e. g. nếu bạn đang cố gắng xây dựng một từ điển các thuật ngữ bằng tiếng Hy Lạp và bạn có một chỉ mục # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
54 được xác định để ngăn việc nhập các từ trùng lặp, thì bạn sẽ nhận được các từ trùng lặp sai đối với những từ không khớpVí dụ, đây là hai từ Hy Lạp có ý nghĩa khác nhau đáng kể, một trong số đó là thô lỗ, còn lại thì không.
μαλακά
μαλάκα
Nếu bạn cố chèn những thứ này vào cột
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49, bạn sẽ nhận được “Lỗi MySQL 1062. mục nhập trùng lặp cho khóa”. Vì vậy, trong trường hợp cụ thể này, # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
37 là lựa chọn hợp lýDavid Trotz đã viết về.
Cảm ơn bạn về bài viết — nó là cứu cánh giúp bạn hiểu rõ hơn về tài liệu MySQL
Tôi có một câu hỏi mà tôi vẫn chưa rõ. Nếu tôi có một cột
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
7 và nó không được lập chỉ mục, tôi có thể để kích thước của nó là # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
32 không?David Trotz đã viết về.
Tôi đã trả lời và phát hiện ra một vài điều có thể giúp ích cho người đọc bài viết của bạn
Trước khi đi vào vấn đề đó, tôi muốn nhắc lại rằng bài viết của bạn cực kỳ hữu ích trong việc giúp tôi bắt đầu hiểu những gì tôi cần làm để nhận được sự hỗ trợ thích hợp của
# For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9. Cảm ơn bạn đã là người tiên phong ở đâyLưu ý khi chuyển đổi chỉ mục
Bạn đã đề cập một chút lý do tại sao bạn thay đổi các cột từ
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
7 thành con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
8 và bây giờ tôi đã hiểu tại sao bạn làm điều này, nhưng bạn đã không đề cập (mặc dù điều đó được ngụ ý nếu bạn hiểu MySQL) rằng điều này sẽ dẫn đến việc cắt bớt nếu bạn đang sử dụng nhiều hơn . MySQL sẽ cảnh báo bạn sau khi hành động bẩn được thực hiện, nhưng lúc đó thì đã quá muộnNó có thể hữu ích để giải thích rằng bạn chỉ cần làm điều này nếu bạn lập chỉ mục cột và không lo lắng về việc cắt bớt nhưng trên thực tế, bạn không cần phải làm điều đó, bởi vì bạn có thể chỉ cần tạo chỉ mục để chỉ sử dụng 191 ký tự hợp lệ
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
2Để biết thêm về điều này, hãy xem. mysql 5. 5 tài liệu. 13. 1. 13 cú pháp
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
62Lưu ý khi chuyển đổi bảng
Không cần thiết phải chuyển đổi tất cả các cột của bạn vì chúng sẽ kế thừa mã hóa của bảng và được chuyển đổi khi bảng được chuyển đổi, trên thực tế, ngay cả khi cột có mã hóa được chỉ định, cột sẽ nhận được mã hóa mặc định của bảng. Đây rất có thể là những gì bạn muốn nhưng tôi đưa nó ra ngoài như một lời cảnh báo cho những người khác
Cũng cần lưu ý khi chuyển đổi một bảng thành
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 từ # For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9. nếu bạn có một cột là ________ 35 _______1, MySQL sẽ tự động nâng cấp cột đó thành mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
78 để chứa thêm không gian lưu trữ cần thiết cho mã hóa mới. Tôi chỉ thử nghiệm điều này với con = DriverManager.getConnection("jdbc:mysql://localhost:3306/[dbName]?useUnicode=true&characterEncoding=utf8mb4&connectionCollation=utf8mb4_unicode_ci", "root", "root");
1 và cho rằng nó tương tự với java.sql.SQLException: Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
7, v.v.Tôi nói tất cả những điều đó để lưu ý rằng bạn thực sự không cần phải chạy
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
3…trên tất cả các cột của bạn trừ khi bạn muốn ghi đè hành vi mặc định kế thừa từ bảng khi nó được chuyển đổi. Nó sẽ chạy lại và lãng phí thời gian của bạn, vì nó không nhìn vào lệnh
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
69 của bạn và lưu ý rằng sẽ không có thay đổi nào xảy raPeter Torelli đã viết trên.
bài đăng tuyệt vời. Tôi đã thực hiện tất cả các cập nhật cho máy chủ của mình mà bạn chỉ định. Tuy nhiên, khi tôi nhập dòng kiểm tra của bạn
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
8 thì vẫn còn một khoảng trống trong kết quả đã chọn, như vậy[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
4Tôi đã bỏ lỡ cái gì?
Beau Key đã viết trên.
Có thể tôi ngu ngốc nhưng việc tạo bản sao lưu của tất cả cơ sở dữ liệu (có liên quan), xóa cơ sở dữ liệu, cập nhật
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
71 và khôi phục cơ sở dữ liệu từ bản sao lưu không dễ dàng hơn sao?Mehdi đã viết trên.
bài viết thực sự hữu ích
Cảm ơn rất nhiều
Klaus đã viết trên.
Tôi đang sử dụng
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49 trong MySQL nhưng khi tôi tải lên một tệp có UTF-8 (CP 65001) thì tôi nhận được tất cả tiếng Đức “Umlaute” # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
73 sai những gì tôi có thể thấy đúng trong trình chỉnh sửa Notepadhnuecke đã viết trên.
Cảm ơn bạn vì những gợi ý và giải thích tuyệt vời;
Tôi đã có cùng một cấu hình lộn xộn như. Tôi đã đạt được một số tiến bộ, nhưng tôi vẫn không thể đặt
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
74 và # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
75 thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0. biến của tôi thực sự trông như thế này[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
5Tôi cho rằng điều này ngăn tôi chuyển đổi trang WordPress của mình thành nhiều trang. Ít nhất tôi vẫn nhận được thông báo lỗi khi WordPress cố gắng tạo bảng cho một trang web mới
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
6WordPress sử dụng
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 kể từ tháng 3 hoặc tháng 4 năm 2015, tôi nghĩ vậy. Tôi cũng đang kiểm tra trong diễn đàn WP xem những gì tôi thấy có phải là lỗi không, bởi vì các bảng cho trang web đầu tiên có thể được tạo. Hy vọng ai đó ở đây có thể cho tôi một gợi ý về cách tôi có thể quản lý để thay đổi bộ ký tự cho hai biến còn lạiThanks
Chris Christoff đã viết trên.
Thấy
Paul đã viết trên.
Cảm ơn bạn về hướng dẫn này — nó thực sự hữu ích
Tôi cũng phải loại bỏ và tạo lại tất cả các thủ tục được lưu trữ của cơ sở dữ liệu (và cả các chức năng) để chúng thực thi trong bộ ký tự mới, nếu không tôi sẽ nhận được.
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
78 khi gọi cho họ. Ngay cả khi mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
43 bằng với $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0Chạy
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
7…để xem quy trình nào chưa được cập nhật lên các giá trị đối chiếu cơ sở dữ liệu mới của máy chủ
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
41, mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
48 vàJustin Lee đã viết trên.
Cảm ơn bạn rất nhiều vì bài viết này, Mathias. Tôi không biết làm thế nào tôi có thể khắc phục sự cố UTF-8 của mình nếu không có điều này
Tôi đã làm theo một số lời khuyên trong một số nhận xét khác và tôi đã dành một ngày để viết lại toàn bộ dự án của mình để sử dụng Postgres thay thế. Nó không quá tệ. Nó chủ yếu liên quan đến việc thay đổi tất cả MySQL SQL vui nhộn không chuẩn thành SQL thích hợp. Và đoán xem, trong Postgres, nội dung UTF-8 hoạt động vượt trội. Bạn không phải chỉ định bất cứ điều gì. Nó chỉ hoạt động theo mặc định vì đó là cách đúng đắn để thực hiện
Đối với bất kỳ ai khác tình cờ thấy trang web này tại đây, tôi khuyến khích bạn chuyển sang PostgreSQL. MySQL đã được mua bởi Oracle và họ đã không làm bất cứ điều gì kể từ đó. Tôi nghĩ rằng nó đã bị hỏng ngay cả trước đây
Có vẻ như Michael Stonebreaker vẫn sẽ cười cuối cùng với Larry Ellison;) (ít nhất là về chất lượng phần mềm)
Erez đã viết trên.
Sử dụng SqlWorkbench, tôi không thể thay đổi
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
83 và mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
41 cho đến khi tôi sử dụng dòng sau đây như một phần của tập lệnh do bạn cung cấp. # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
85Cài đặt này bị xóa mỗi khi tôi khởi động lại SqlWorkbench. Bất kỳ ý tưởng làm thế nào để giữ nó?
Dennis A đã viết trên.
Tôi đã thực hiện tất cả các bước này và hiện tại mọi thứ đều ổn trong các bảng của tôi, nhưng máy chủ vẫn bị treo khi tôi cố gắng gửi một biểu mẫu có chứa các biểu tượng cảm xúc gây phiền nhiễu hiện đang xuất hiện trong giao tiếp của mọi người. Tôi đang sử dụng trình kết nối MySQL ODBC vì phần mềm này rất cũ. Tôi tự hỏi liệu trình kết nối có phải là lý do khiến nó bị lỗi không. Phiên bản MySQL của tôi là 5. 5. 36
Mighty Chaffinch đã viết về.
Bất kỳ ai sử dụng Trình kết nối/ODBC nên biết lời khuyên trong lỗi MySQL #69021
Xin lưu ý rằng trong mọi trường hợp, ứng dụng của bạn không được đặt bộ ký tự cho kết nối hoặc kết quả, v.v. Nó luôn được trình điều khiển đặt tại thời điểm kết nối thành UTF-8. UTF-8 được sử dụng làm bộ ký tự “vận chuyển” để giao tiếp với máy chủ. Vì vậy, việc chuyển đổi dữ liệu thường diễn ra tương tự như sau
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
8
Như bạn có thể thấy ở cả hai đầu [ASP] và [Bảng MySQL], dữ liệu ở dạng UFT8MB4
Một lần nữa, ứng dụng phải chỉ ra bộ ký tự dự định sử dụng tùy chọn đặc biệt
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
86 và không nên cố gắng đặt bất kỳ thuộc tính kết nối nào vì nó gây nhầm lẫn cho các chức năng chuyển đổi trình điều khiển
Ngoài ra, nếu bạn muốn quay lại văn bản từ các biểu mẫu ASP cổ điển trở lại MySQL, bạn cần đặt
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
9Và lưu các tệp
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
87 của bạn dưới dạng UTF-8 trong trình soạn thảo văn bản của bạnHy vọng điều này sẽ cứu ai đó nỗi đau và sự nhầm lẫn mà tôi đã trải qua khi tìm đến giải pháp này
Moz đã viết trên.
Và đừng quên phân tán
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
88 một cách tự do xung quanh bất kỳ tập lệnh xử lý cơ sở dữ liệu nào mà bạn có thể có, vì nhiều tiện ích MySQL mặc định là # For each table
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
9 và chọn môi trường cục bộ nếu bạn không bắt buộc ___1_______0 thích hợp trên mọi thứNgoài ra, cảm ơn bạn rất nhiều vì đã thu thập mọi thứ vào một trang như thế này. Nó làm cho một quá trình khủng khiếp dễ dàng hơn một chút
Petovan đạo đức giả đã viết trên.
Cảm ơn hướng dẫn toàn diện này để thêm đống phân trên các trang web ở mọi nơi
hoekma đã viết trên.
Tôi đặt cài đặt cho ba phần vào
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
05 và khởi động lại máy chủ nhưng không phải tất cả chúng đều được áp dụng khi tôi kiểm tra lệnh # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
92. Đó là vấn đề chính xác giống như. Tuy nhiên, khi tôi đặt các cài đặt vào # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
93, tất cả chúng đều được áp dụng thành côngHy vọng rằng điều này sẽ giúp một ai đó
P. S. Máy chủ MySQL phiên bản 5. 5. 46 và Ubuntu 14. 04. 2
Brad Kent đã viết trên.
Bàn làm việc của MySQL yêu cầu bạn phải
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
94 sau khi kết nối — không có cách nào để định cấu hình nó để sử dụng cài đặt mặc định hoặc cài đặt cho mỗi kết nối đã xác địnhOliver đã viết trên.
Tôi nghĩ bạn gặp lỗi trong “Bước 3. Sửa đổi cơ sở dữ liệu, bảng và cột” trong câu lệnh
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
69ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Nó nói hai lần
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
96 nhưng thực ra nó phải như thế nàymysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name 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 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
1…và bạn nên sử dụng
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
97 thay vì # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
98 vì nó kém hiệu quả hơnChúc mừng Oliver
Mikael đã viết trên.
Tôi đã tự hỏi tại sao bạn đề xuất utf8mb4 thay vì utf32?
Mikael đã viết trên.
Tôi vừa thay đổi mặc định máy chủ của mình thành utf32 và cũng làm như vậy với cơ sở dữ liệu và bảng. Tôi cũng đã thay đổi mặc định của máy khách thành utf32 và đó hóa ra là một ý tưởng tồi. Lệnh 'mysql', trên Linux, bị nghẹt và xuất hiện lỗi này (không có thêm thông tin)
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name 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 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
10 rows in set (0.00 sec)
2Vì vậy, tôi đã phải thay đổi mã hóa mặc định của máy khách thành "utf8mb4". đầu ra của
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
8Bây giờ có ý nghĩa vì chỉ phía máy khách sử dụng utf8mb4 và máy chủ sử dụng utf32
Sam đã viết trên.
Bạn có biết nơi để thêm nó nếu tôi đang sử dụng Flask không?
Bạn đã thêm cài đặt vào các thủ tục được lưu trữ khi bạn tạo lại chúng chưa?
Bắp cải nổ đã viết trên.
tôi nghĩ bạn có một lỗi đánh máy.
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
28 và [client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
03 cần phải được viết là [client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
04 và [client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
05 (gạch dưới thay vì gạch nối) trong mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38, ít nhất là trên máy của tôinewPaul đã viết trên.
Tôi đang sử dụng XAMPP. Tôi tìm tệp
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
38 ở đâu?Shah Hussain đã viết trên.
Trong XAMPP, bạn phải thực hiện tất cả điều này trong "my. ini" trong tab cấu hình mysql
Shashi đã viết trên.
@ArunMohan Tôi cũng gặp vấn đề tương tự… Trong trường hợp của tôi, phiên bản trình kết nối mysql là vấn đề. Tôi đã sử dụng 5. 1. 22; . 0. 3 và nó đã hoạt động. Hi vọng điêu nay co ich
Rick James đã viết trên.
3 cái
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
08 nhiều quá, chắc hỏng. Đặc biệt, [client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
09 có thể sẽ thất bại nếu # For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
33 không được thực hiện trướcVấn đề
# For each database:
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
# For each table:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# For each column:
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# (Don’t blindly copy-paste this! The exact statement depends on the column type, maximum length, and other properties. The above line is just an example for a `VARCHAR` column.)
33 đã được loại bỏ trong 5. 7Raoul Duk đã viết trên.
Bài báo tuyệt vời
Tôi có một câu hỏi tiếp theo. là chuyển đổi một kịch bản tất cả hoặc không có gì?
Giả sử tôi có một cơ sở dữ liệu với > 70 bảng và tôi biết rằng tôi thực sự chỉ quan tâm đến
mysql> SHOW WARNINGS;
+---------+------+------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------+
| Warning | 1366 | Incorrect string value: '\xF0\x9D\x8C\x86' for column 'column_name' at row 1 |
+---------+------+------------------------------------------------------------------------------+
1 row in set (0.00 sec)
49 trong một bảng cụ thể. Tôi biết tôi chỉ có thể chuyển đổi một bảng cụ thể đó. Nhưng câu hỏi của tôi là. trong kết nối máy khách của tôi (từ ứng dụng Python Django), tôi cần đặt mã hóa thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0 để đảm bảo rằng tôi đang chèn/truy vấn dữ liệu theo đúng mã hóa cho bảng được đề cậpNhưng có hại không khi cài đặt đó làm cài đặt toàn cầu trong tất cả các kết nối DB cho tất cả các bảng mà tôi chưa di chuyển sang
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases
0?Hay tốt hơn là di chuyển tất cả các bảng?
Prateek Gupte đã viết trên.
Điều này sẽ chăm sóc các bản sao cho cơ sở dữ liệu?
dGo đã viết trên.
Cám ơn vì cái này. Tôi đã viết một đoạn script nhỏ để tạo truy vấn cập nhật cho bảng, cột và dạng xem. Nếu nó đúng (tôi đang hỏi), tôi nghĩ nó cũng có thể hữu ích cho những người khác. Vì vậy, tập lệnh này tạo và danh sách các truy vấn SQL mà bạn sẽ phải chạy để cập nhật bộ ký tự bảng, cột và dạng xem