Bộ ký tự mysql nhị phân
Bạn có đang sử dụng bộ ký tự 9 của MySQL trong cơ sở dữ liệu của mình không? Show
UTF-8có 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 # For each tableREPAIR TABLE table_name;OPTIMIZE TABLE table_name;9 của MySQLTrong một thời gian dài, tôi đã sử dụng bộ ký tự 9 của MySQL cho cơ sở dữ liệu, bảng và cột, giả sử nó được ánh xạ tới mã hóa UTF-8 được mô tả ở trên. Bằng cách sử dụng 9, tôi có thể lưu trữ bất kỳ biểu tượng nào tôi muốn trong cơ sở dữ liệu của mình — hoặc tôi nghĩ vậyTrong 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 biểu tượng U+1D306 TETRAGRAM FOR CENTER ( $ mysqlcheck -u root -p --auto-repair --optimize --all-databases4) vào cơ sở dữ liệu MySQL đằng sau trang web này. Cột tôi đang cố cập nhật có đối chiếu $ mysqlcheck -u root -p --auto-repair --optimize --all-databases5 và bộ ký tự kết nối được đặt thành 9________số 8Nội dung đã bị cắt bớt ở phần đầu tiên , trong trường hợp này là $ mysqlcheck -u root -p --auto-repair --optimize --all-databases4 — vì vậy, thay vào đó, việc cố gắng chèn $ mysqlcheck -u root -p --auto-repair --optimize --all-databases8 thực sự đã chèn vào $ mysqlcheck -u root -p --auto-repair --optimize --all-databases9, dẫn đến mất dữ liệu (và có thể gây ra sự cố bảo mật; xem bên dưới). MySQL cũng trả lại một thông báo cảnh báo $ mysqlcheck -u root -p --auto-repair --optimize --all-databases2 Hóa ra bộ ký tự 9 của MySQL chỉ thực hiện một phần mã hóa UTF-8 phù hợp. Nó chỉ có thể lưu trữ các ký hiệu được mã hóa UTF-8 bao gồm một đến ba byte; 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 9 của MySQLĐiều này không chỉ ảnh hưởng đến ký tự $ mysqlcheck -u root -p --auto-repair --optimize --all-databases4 mà còn ảnh hưởng đến các ký hiệu quan trọng hơn như U+01F4A9 PILE OF POO ( 8). Tổng cộng, đó là 1.048.575 điểm mã có thể bạn không thể sử dụng. Trên thực tế, 9 của MySQL chỉ cho phép bạn lưu trữ 5. 88% ($ mysqlcheck -u root -p --auto-repair --optimize --all-databases85) của tất cả các điểm mã Unicode có thể. UTF-8 thích hợp có thể mã hóa 100% tất cả các điểm mã Unicode 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
TL; DR Mã hóa 9 của MySQL được đặt tên một cách khó hiểu, vì nó khác với mã hóa UTF-8 thích hợp. Nó không cung cấp hỗ trợ Unicode đầy đủ, điều này có thể dẫn đến mất dữ liệu hoặc lỗ hổng bảo mật$ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 của MySQLMay 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à $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 ánh xạ tới đúng UTF-8 và do đó hỗ trợ đầy đủ Unicode, bao gồm các ký hiệu thiên văn Chuyển từ # For each tableREPAIR TABLE table_name;OPTIMIZE TABLE table_name;9 của MySQL sang $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0Bước 1. Tạo bản sao lưuTạ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 Bước 2. Nâng cấp máy chủ MySQLNâ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 Bước 3. Sửa đổi cơ sở dữ liệu, bảng và cộtThay đổ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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 thay vì 9 6Vì $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 hoàn toàn tương thích ngược với 9 nên sẽ không xảy ra mojibake hoặc các hình thức mất dữ liệu khác. (Nhưng bạn có, phải không?)Bước 4. Kiểm tra độ dài tối đa của cột và khóa chỉ mụcĐây có lẽ là phần tẻ nhạt nhất trong toàn bộ quá trình nâng cấp Khi chuyển đổi từ 9 sang $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0, độ dài tối đa của cột hoặc khóa chỉ mục không thay đổi theo byte. Do đó, nó nhỏ hơn về ký tự, vì độ dài tối đa của một ký tự hiện là bốn byte thay vì ba Ví dụ: cột 17 có thể chứa tối đa 255 byte, tương ứng với 85 ký tự ba byte hoặc 63 ký tự bốn byte. Giả sử bạn có một cột 17 sử dụng 9 nhưng phải có thể chứa hơn 63 ký tự. Với yêu cầu này, bạn không thể chuyển đổi cột này thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 trừ khi bạn cũng thay đổi loại dữ liệu thành loại dài hơn, chẳng hạn như 51 — bởi vì nếu bạn cố gắng điền cột đó bằng các ký tự bốn byte, thì bạn chỉ có thể Đ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ữ 52 có độ dài chỉ mục tối đa là 767 byte, vì vậy đối với cột 9 hoặc $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0, bạn có thể lập chỉ mục tối đa tương ứng là 255 hoặc 191 ký tự. Nếu bạn hiện có 9 cột với chỉ mục dài hơn 191 ký tự, bạn sẽ cần lập chỉ mục một số lượng ký tự nhỏ hơn khi sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. (Vì điều này, tôi đã phải thay đổi một số cột 57 được lập chỉ mục thành 58. )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 Bước 5. Sửa đổi bộ ký tự kết nối, máy khách và máy chủTrong mã ứng dụng của bạn, đặt bộ ký tự kết nối thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. Điều này có thể được thực hiện bằng cách thay thế bất kỳ biến thể nào của $ mysqlcheck -u root -p --auto-repair --optimize --all-databases200 bằng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases201. Nếu câu lệnh $ mysqlcheck -u root -p --auto-repair --optimize --all-databases202 cũ của bạn chỉ định đối chiếu, hãy đảm bảo thay đổi cả điều đó, e. g. $ mysqlcheck -u root -p --auto-repair --optimize --all-databases203 trở thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases204 Đả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 ( $ mysqlcheck -u root -p --auto-repair --optimize --all-databases205) $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 Bạn có thể dễ dàng xác nhận các cài đặt này hoạt động chính xác $ mysqlcheck -u root -p --auto-repair --optimize --all-databases1 Như bạn có thể thấy, tất cả các tùy chọn có liên quan được đặt thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0, ngoại trừ tùy chọn đó phải là $ mysqlcheck -u root -p --auto-repair --optimize --all-databases208 trừ khi bạn đang sử dụng hệ thống tệp hỗ trợ các ký tự được mã hóa UTF-8 nhiều byte trong tên tệp và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases209 luôn là 9 và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 Bước 6. Sửa chữa và tối ưu hóa tất cả các bảngSau 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ĩ nó 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases211 không có bất kỳ tác dụng nào, mặc dù không 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases212 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases Đ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 Tóm lượcKhông bao giờ sử dụng 9 trong MySQL — thay vào đó hãy luôn sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. Việc cập nhật cơ sở dữ liệu và mã của bạn có thể mất một chút thời gian, nhưng nó chắc chắn đáng để nỗ lực. Tại sao bạn lại tự ý giới hạn tập hợp các ký hiệu có thể được sử dụng trong cơ sở dữ liệu của mình? . Làm điều đúng đắn và sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. 🍻 Về tôiChà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 David 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-databases4 → $ mysqlcheck -u root -p --auto-repair --optimize --all-databases217 Mathias đã 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases218 là gì? Tại sao bạn sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases219, vốn đã là mặc định vì $ mysqlcheck -u root -p --auto-repair --optimize --all-databases220? 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
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 9, nó vẫn sẽ sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0). 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úc
$ mysqlcheck -u root -p --auto-repair --optimize --all-databases202 cho biết bộ ký tự nào 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-databases0, bạn cần đảm bảo 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-databases0 Đó 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õ. Cảm ơn Tôi Và Tôi đã viết trên. Bạn đã kiểm tra tác dụng của $ mysqlcheck -u root -p --auto-repair --optimize --all-databases218 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases232, với $ mysqlcheck -u root -p --auto-repair --optimize --all-databases233, với $ mysqlcheck -u root -p --auto-repair --optimize --all-databases234 thay vì $ mysqlcheck -u root -p --auto-repair --optimize --all-databases235). 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? $ mysqlcheck -u root -p --auto-repair --optimize --all-databases228 không phải là giá trị duy nhất bạn có thể đặt (không có $ mysqlcheck -u root -p --auto-repair --optimize --all-databases237) trong $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 (vâng, $ mysqlcheck -u root -p --auto-repair --optimize --all-databases239 cũng vậy, nhưng hiện tại điều đó 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases240 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 máy khách ( $ mysqlcheck -u root -p --auto-repair --optimize --all-databases241, $ mysqlcheck -u root -p --auto-repair --optimize --all-databases242 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases243) sẽ luôn là giá trị này. Bạn không cần sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases237 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases228 Mathias đã viết trên. Đặt $ mysqlcheck -u root -p --auto-repair --optimize --all-databases218 (hoặc sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases247) là cách duy nhất để tôi có thể khiến $ mysqlcheck -u root -p --auto-repair --optimize --all-databases248 hiển thị dưới dạng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249 thay vì $ mysqlcheck -u root -p --auto-repair --optimize --all-databases250 khi thực hiện truy vấn $ mysqlcheck -u root -p --auto-repair --optimize --all-databases251. 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ày Cảm ơn bạn đã chỉ ra cài đặt $ mysqlcheck -u root -p --auto-repair --optimize --all-databases237 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ụ $ mysqlcheck -u root -p --auto-repair --optimize --all-databases205 có thể được tối ưu hóa hơn nữa Tôi Và Tôi đã viết trên. Để đặt đối chiếu của kết nối thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases254 thay vì $ mysqlcheck -u root -p --auto-repair --optimize --all-databases255, tôi có thể thực hiện việc này thành công bằng cách sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases256. Nhưng bạn chỉ cần sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases254 cho $ mysqlcheck -u root -p --auto-repair --optimize --all-databases258, nếu không, bạn có thể sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases255 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
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. $ mysqlcheck -u root -p --auto-repair --optimize --all-databases228 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases263. 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases264. 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ự. html kế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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases202 hoặc $ mysqlcheck -u root -p --auto-repair --optimize --all-databases266 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à 9?. sTôi nghĩ sẽ an toàn hơn nhiều nếu không tin tưởng vào 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases268 sau những thay đổi này, đó là lỗi và bạn nên báo cáo Binyamin đã viết trên. @Mathias, tôi đã làm theo các bước của bạn để thay đổi MySQL 5. 5. 25 mã hóa thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0, nhưng tiếc là SQL trả về
…khi tôi chạy truy vấn $ mysqlcheck -u root -p --auto-repair --optimize --all-databases8 …và với $ mysqlcheck -u root -p --auto-repair --optimize --all-databases271, 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ào Với 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases218 và sửa nó với $ mysqlcheck -u root -p --auto-repair --optimize --all-databases274 Lạ là máy chủ cũng trả về lỗi 500 vì một số loại hàng MySQL là $ mysqlcheck -u root -p --auto-repair --optimize --all-databases275. Sau khi tôi thay đổi loại thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases276, lỗi đã biến mất và mã hóa $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 hiện hoạt động tốt Mathias đã viết trên. Sự cố $ mysqlcheck -u root -p --auto-repair --optimize --all-databases278 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases278 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 51 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases281 Như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ề mức sử dụng bộ nhớ, nhưng hiệu suất của $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 chậm hơn so với 9 3 byte. 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ự 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-databases0 với MySQL, nhưng tất cả chúng đều chưa hoàn chỉnh. 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-databases0 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. $ mysqlcheck -u root -p --auto-repair --optimize --all-databases287 làm cho nó hoạt động với tôi trên MySQL 5. 5. 28 CodeKingPlusPlus đã 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 1Tôi không thể tìm ra cách thay đổi $ mysqlcheck -u root -p --auto-repair --optimize --all-databases288 thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases289 Chuỗi kết nối của tôi là 5Bạn đã giải được $ mysqlcheck -u root -p --auto-repair --optimize --all-databases290 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 trên. 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ố $ mysqlcheck -u root -p --auto-repair --optimize --all-databases20 Đâ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-databases0. Thử sử dụng trình điều khiển JDBC có hỗ trợ $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 — MySQL Connector/J 5. 1. 13 (hoặc phiên bản mới hơn) chẳng hạn Julia Neystadt đã viết trên. 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-databases0 được đặt chính xác $ mysqlcheck -u root -p --auto-repair --optimize --all-databases21 Giúp đỡ của bạn được đánh giá rất cao Julia Julia Neystadt đã viết trên. 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ó $ mysqlcheck -u root -p --auto-repair --optimize --all-databases294 trong $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases296 trong kết nối JDBC của mình. Tùy thuộc vào phiên bản MySQL Connector/J của bạn, bạn cũng cần phải có $ mysqlcheck -u root -p --auto-repair --optimize --all-databases297 hoặc không, xem bài viết của tôi Itay đã 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 thấy rằng phpMyAdmin không xử lý được $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. 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ý $ mysqlcheck -u root -p --auto-repair --optimize --all-databases299 và xem phpMyAdmin đang làm gì, tôi nhận thấy nó đang đặt bộ ký tự thành 9 mỗi lần. Nó được mã hóa cứng trong dòng 1303 của 601$ mysqlcheck -u root -p --auto-repair --optimize --all-databases22 Thay đổi nó thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 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 phpMyAdmin Ngoà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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249 Mathias đã viết trên. Cảm ơn. 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ó thể có $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. Đã 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases23 Đây là giao diện của 605 của tôi$ mysqlcheck -u root -p --auto-repair --optimize --all-databases24 Tô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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 Tôi không thể lưu $ mysqlcheck -u root -p --auto-repair --optimize --all-databases4 nhưng tôi có thể lưu các ký tự như 608, 609 và 610Mathias đã viết trên. Bạn có chắc tệp $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 mà bạn đang chỉnh sửa là tệp được tải không? $ mysqlcheck -u root -p --auto-repair --optimize --all-databases25 Trên máy của tôi, bản in này
Đả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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 sang 613 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases27 Câu lệnh sql $ mysqlcheck -u root -p --auto-repair --optimize --all-databases28 Tôi đã thử chạy lệnh này $ mysqlcheck -u root -p --auto-repair --optimize --all-databases29 Đầu ra cho biết "0 hàng bị ảnh hưởng" 60Tôi đoán rằng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 không được áp dụng cho hàng của tôi Nhưng khi tôi chạy như sau 61Đ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 62Cảm ơn vì bài viết tuyệt vời Binyamin đã viết trên. 615 trong MySQL 5. 5. 3 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 được hỗ trợ kể từ MySQL 5. 5. 3 Tại sao bạn lại sử dụng 615 trong 618 và 619?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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 …Tôi nhận được những kết quả này 64Không có phần 618 và 619 thì kết quả đã khác 65Mihai đã viết trên. bài viết rất tốt. Chúng tôi đã biết về hỗn hợp có tên là 9 này, 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. Cảm ơn. 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-databases0 ngoài kia Steve 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 để đặt $ mysqlcheck -u root -p --auto-repair --optimize --all-databases248 trong 5. 6. 15. Cảm ơn rất nhiều HS viết tiếp. 66Đó là những gì tôi có trong $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 dưới 626. 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-databases0 67Khi chạy 68tôi hiểu rồi 69câu hỏi của tôi là
Cảm ơn P. S. Với cấu hình trên trong $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238, 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ừ 632 xuống 633, bạn đã thử đặt tùy chọn 634 của MySQL chưa? . đâ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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases00 …đến đối tượng 635 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249? Mathias đã viết trên. Xem câu trả lời Stack Overflow này để biết sự khác biệt giữa 638, 639 và 640Tâ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 641 vào MySQL, nó báo lỗi 1062Bảng và cột này được sử dụng 642$ mysqlcheck -u root -p --auto-repair --optimize --all-databases01 …sau đó mình tìm hiểu nếu đổi sang dùng 643 thay vì dùng 642 thì chèn hàng thứ 2 vào không bị lỗi, vậy có gợi ý nào khắc phục nếu tiếp tục dùng 642 không? HS viết tiếp. Bạn có thấy rằng có một đối chiếu 646 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
Nghe có vẻ như 650 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. 646?Có cách nào để biên dịch MySQL 5. 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ù 637 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 654 đượ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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249, 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, 637 là tùy 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 57 và nó không được lập chỉ mục, tôi có thể để kích thước của cột đó là 632 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 tôi đi sâu 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 9. Cảm ơn bạn đã là người tiên phong ở đâyLưu ý khi chuyển đổi chỉ mụcBạn đã đề cập một chút lý do tại sao bạn thay đổi các cột từ 57 thành 58 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ệ $ mysqlcheck -u root -p --auto-repair --optimize --all-databases02 Để 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 662Lưu ý khi chuyển đổi bảngKhô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-databases0 từ 9. nếu bạn có một cột là 51, MySQL sẽ tự động nâng cấp cột đó lên $ mysqlcheck -u root -p --auto-repair --optimize --all-databases278 để chứa thêm dung lượng 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 51 và cho rằng nó tương tự với 17, 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases03 …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 669 của bạn và lưu ý rằng sẽ không có thay đổi nào diễn 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 thử nghiệm của bạn $ mysqlcheck -u root -p --auto-repair --optimize --all-databases8, vẫn còn một khoảng trống trong các kết quả đã chọn, như vậy $ mysqlcheck -u root -p --auto-repair --optimize --all-databases04 Tô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 671 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249 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” 673 sai những gì tôi có thể thấy ngay 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 674 và 675 thành $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0. biến của tôi thực sự trông như thế này $ mysqlcheck -u root -p --auto-repair --optimize --all-databases05 Tô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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases06 WordPress sử dụng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 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ại Cảm ơn Chris Christoff đã viết trên. Nhì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. 678 khi gọi cho họ. Ngay cả khi $ mysqlcheck -u root -p --auto-repair --optimize --all-databases243 bằng $ mysqlcheck -u root -p --auto-repair --optimize --all-databases0 Chạy $ mysqlcheck -u root -p --auto-repair --optimize --all-databases07 …để 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ủ $ mysqlcheck -u root -p --auto-repair --optimize --all-databases241, $ mysqlcheck -u root -p --auto-repair --optimize --all-databases248 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 683 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases241 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. 685Cà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 về lời khuyên trong MySQL bug #69021
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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases09 Và lưu các tệp 687 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 tự do 688 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ì rất nhiều tiện ích MySQL mặc định là ____09 và chọn môi trường cục bộ nếu bạn không buộc ____10 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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases205 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 692. Đó là vấn đề chính xác giống như. Tuy nhiên, khi tôi đặt cài đặt vào 693, 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 694 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 669$ mysqlcheck -u root -p --auto-repair --optimize --all-databases8 Nó nói hai lần 696 nhưng thực ra nó phải như thế này$ mysqlcheck -u root -p --auto-repair --optimize --all-databases11 …và bạn nên sử dụng 697 thay vì 698 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) $ mysqlcheck -u root -p --auto-repair --optimize --all-databases12 Vì 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 68Bâ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 quy trình được lưu trữ khi bạn tạo lại chúng chưa? ExplodingCabbage đã viết trên. tôi nghĩ bạn có một lỗi đánh máy. $ mysqlcheck -u root -p --auto-repair --optimize --all-databases228 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases003 cần phải được viết là $ mysqlcheck -u root -p --auto-repair --optimize --all-databases004 và $ mysqlcheck -u root -p --auto-repair --optimize --all-databases005 (gạch dưới thay vì gạch nối) trong $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238, ít nhất là trên máy của tôi newPaul đã viết trên. Tôi đang sử dụng XAMPP. Tôi tìm tệp $ mysqlcheck -u root -p --auto-repair --optimize --all-databases238 ở đâ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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases008 nhiều quá, chắc hỏng. Đặc biệt, $ mysqlcheck -u root -p --auto-repair --optimize --all-databases009 có thể sẽ thất bại nếu 633 không được thực hiện trướcVấn đề 633 đã đượ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 $ mysqlcheck -u root -p --auto-repair --optimize --all-databases249 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 ứng dụng 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-databases0 để đả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ập Như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-databases0? 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 |