2011-11-01 66 views
6

Tôi hiện đang gặp sự cố khi lưu các ký tự đặc biệt (® ​​& ©) vào cơ sở dữ liệu mySQL.Lưu các ký tự đặc biệt vào cơ sở dữ liệu MySQL

Trên ngăn xếp cục bộ (cục bộ cho máy phát triển của tôi) hoạt động diễn ra suôn sẻ và những gì được nhập vào giao diện người dùng sẽ được lưu như mong đợi.

Với cùng một mã front-end trên máy chủ tập trung khi lưu vào DB ký tự được tiến hành với các ký tự khác được lưu dưới dạng ®. Đây không phải là vấn đề khi xem bản ghi trên giao diện người dùng vì nó đảo ngược nội dung hoạt động và hiển thị chính xác.

Sự cố đến từ một hệ thống riêng biệt khác sử dụng cùng một cơ sở dữ liệu và không thực hiện bất kỳ thay đổi nào xuất hiện dưới dạng ® thay vì chỉ đơn giản là ®.

Lý do cho sự nhầm lẫn của tôi là dường như nó hoạt động theo yêu cầu trên ngăn xếp cục bộ của tôi nhưng không hoạt động trên máy chủ tập trung.

Tôi đang tìm ý tưởng về nội dung cần tìm kiếm có thể gây ra điều này trên cấu hình máy chủ so với địa phương của tôi.

Cảm ơn trước Đánh dấu

+0

Quên để thêm vào cuối phía trước được viết bằng PHP. – MarkJWiggins

+1

Kiểm tra xem mã hóa mặc định php, mã hóa kết nối mysql và bảng mysql và collation trường là như nhau. –

+0

+1 Pranav bao gồm hầu hết mọi thứ - chắc chắn cần phải làm điều này. – therobyouknow

Trả lời

1

sau khi bạn chọn DB trong mã php thêm này:

mysql_query("set names 'utf8'"); 

cũng kiểm tra xem cột nơi bạn lưu trữ các văn bản có mã hóa utf8.

+0

+1 @Soaica Mircea, thankyou. Đáng xem xét cho một số kịch bản. Mặc dù điều này có thể không được yêu cầu cho vấn đề ban đầu của OP như tôi đã có thể tái sản xuất này và cung cấp một giải pháp mà không yêu cầu mysql_query ("set names 'utf8'"); Nhưng điều này có thể hữu ích cho các tình huống khác. Cảm ơn một lần nữa. – therobyouknow

2

@Pranav Hosangadi (cảm ơn) bao gồm ba lĩnh vực để kiểm tra tính nhất quán của mã hóa. Các giải pháp sau đây thêm vào đó. Nó cũng có thể đáng xem xét (một biến thể của) @Soaice Mircea của câu trả lời (cảm ơn) cho một số kịch bản theo đó câu trả lời này không sửa chữa vấn đề mặc dù điều này là không cần thiết khi tôi đã có thể tái sản xuất và tìm một giải pháp cho vấn đề của bạn . Dòng suy nghĩ của Pranav dường như thành công cho vấn đề này vì nó liên quan đến việc sử dụng một bộ ký tự ở khắp mọi nơi thay vì một ký tự cụ thể.

năm điều cần làm:

  1. đảm bảo cơ sở dữ liệu charset và bảng sử dụng cùng một charset suốt, kiểm tra này trong phpmyadmin ví dụ, lưu ý và charset này để sử dụng dưới đây

  2. sử dụng tiêu đề php() chức năng với cơ sở dữ liệu charset ví dụ:

    header('Content-Type: text/html; charset=latin1_swedish_ci');
  3. chèn thẻ meta trong phần đầu html ví dụ:

    01.
    <meta http-equiv="content-type" 
    content="text/html;charset=latin1_swedish_ci">
  4. thêm charset động chấp nhận trong thẻ form

    <form action=\"testsubmit.php\" method=\"post\" accept-charset=\"latin1_swedish_ci\">
  5. set charset kết nối mysql ví dụ .:

    $con = mysql_connect("localhost","test","test");  
    mysql_set_charset ("latin1_swedish_ci", $con); 
    
+0

Một điều đặc biệt quan sát là bước 5 ở trên, thiết lập kết nối mysql, có thể không hoạt động ở nơi khác trên cùng một máy chủ, "" Không thể khởi tạo bộ ký tự latin1 "là thông báo lỗi được nhìn thấy. Xem trên phần mềm không liên quan ở đây: http: //bugs.kde.org/226960 Một gợi ý trong cuộc thảo luận đó là: Có thể một trong các bạn nhìn vào/usr/share/mysql/charsets và báo cáo nếu có một tập tin 'latin1.xml' 'latin1.xml' không? bạn ra câu trả lời này mặc dù đây có thể là một idiosyncracy cô lập của thiết lập của tôi. – therobyouknow

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