2010-10-04 20 views
9

Làm thế nào tôi có thể ngừng chuyển đổi mysql ' thành ’ khi tôi chèn?Mysql biến thành 'â € ™?

tôi tin rằng nó có liên quan đến bộ ký tự hay gì đó?

Tôi đang sử dụng php để thực hiện mysql_insert.

+1

Điều này phải làm với bộ ký tự. Làm thế nào để bạn chèn/lấy dữ liệu - tức là thư viện và ngôn ngữ lập trình nào (hoặc có thể là ORM) bạn đang sử dụng? – AndiDog

+0

Bộ ký tự nào là cơ sở dữ liệu của bạn? – RobertPitt

+1

Có, nó phải làm với bộ ký tự. Kiểm tra bảng mã của bảng và trong chuỗi kết nối của bạn. Sử dụng mã hóa chính xác hoặc unicode/utf. – codymanix

Trả lời

13

Các dấu nháy đơn bạn được đăng được gọi là 'acute accent', mà thường được chuyển đổi từ các dấu nháy đơn ở chung bởi một số ứng dụng web. Đó là ký tự UTF8, khi được chèn vào cơ sở dữ liệu Latin-1 sẽ dịch thành 'â € ™'. Điều này có nghĩa là bạn cần phải thay đổi bộ ký tự của MySQL thành UTF8 hoặc thay thế bộ ký tự của trang web của bạn thành Latin-1.Các cựu sẽ được ưa thích:

ALTER DATABASE YourDatabase CHARACTER SET utf8; 
ALTER TABLE YourTableOne CONVERT TO CHARACTER SET utf8; 
ALTER TABLE YourTableTwo CONVERT TO CHARACTER SET utf8; 
... 
ALTER TABLE YourTableN CONVERT TO CHARACTER SET utf8; 
+0

Tôi đã làm điều này và bây giờ bảng là utf8_general_ci nhưng tôi vẫn nhận được cùng một vấn đề? – Hailwood

+0

Nó đang ảnh hưởng đến '' ' – Hailwood

+1

@Hailwood: Bạn cũng nên kiểm tra mã hóa kết nối. – AndiDog

0

Có thể ai đó sẽ biết câu trả lời ngay lập tức, nhưng tôi thì không. Tuy nhiên dưới đây là một số gợi ý về những gì để kiểm tra (và có thể mở rộng câu hỏi trên)

Khi giao dịch với mã hóa và thoát bạn nên bao gồm lịch sử đầy đủ các dữ liệu

  • nó như thế nào đã được tạo ra
  • gì đã xảy ra với nó trước khi vấn đề (nó đã phải đi qua sao lưu, e-mail, nó được tạo ra trên một máy chủ khác nhau, hệ điều hành, vv ..; nếu nó được chuyển giao sau đó nó là tập tin văn bản?)

Ở trên là vì mọi thứ ghi vào tệp văn bản (trình duyệt, mysql client, máy chủ web, ứng dụng php, để đặt tên cho một vài lớp có thể đã thực hiện nó) có thể gây rối ký tự mã hóa.

Để khắc phục, bạn có thể bắt đầu loại bỏ, và do đó bước đầu tiên (trong cuốn sách của tôi), là để

  1. kết nối với máy chủ mysql sử dụng mysql client dòng lệnh.
  2. kiểm tra đầu ra của SHOW VARIABLES LIKE 'character_set%'
    (vì vậy ngay cả trong môi trường đơn giản này, bạn có 7 giá trị có thể ảnh hưởng đến cách dữ liệu được phân tích, lưu trữ và/hoặc hiển thị
  3. kiểm tra SHOW CREATE TABLE TableName, và tìm kiếm charset và thông tin đối chiếu, cả hai mặc định cho bảng và định nghĩa rõ ràng trên các cột

Đã nói tất cả những điều trên, tôi không nghĩ rằng bất kỳ tập lệnh phương Tây nào sẽ chuyển mã một ký tự trích dẫn. Vì vậy, bạn có thể cần xem xét việc thoát và xử lý dữ liệu khác .

EDIT Hầu hết các câu trả lời trên từ và thảo luận here

1

Đây là những gì tôi đã làm, và nó làm việc cho tôi:

  1. Trước tiên hãy chắc chắn rằng cột chứa 'là utf8_general_ci

  2. Sau đó thêm mysql_set_charset vào mã của bạn

    $db=mysql_connect("localhost", $your_username, $your_password); 
    mysql_set_charset('utf8',$db); 
    mysql_select_db($your_db_name, $db); 
    
+0

cũng làm việc cho tôi :) cảm ơn –

Các vấn đề liên quan