1. Trang chủ
  2. » Công Nghệ Thông Tin

Di chuyển một ứng dụng PHP từ MySQL sang DB2, Phần 3: Chuyển đổi mã PHP của bạn doc

22 379 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 22
Dung lượng 323,06 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Di chuyển một ứng dụng PHP từ MySQL sang DB2, Phần 3: Chuyển đổi mã PHP của bạn Giới thiệu về loạt bài này MySQL hiện là máy chủ cơ sở dữ liệu phổ biến nhất được sử dụng với ngôn ngữ lậ

Trang 1

Di chuyển một ứng dụng PHP từ MySQL sang DB2,

Phần 3: Chuyển đổi mã PHP của bạn

Giới thiệu về loạt bài này

MySQL hiện là máy chủ cơ sở dữ liệu phổ biến nhất được sử dụng với ngôn ngữ lập trình PHP

để xây dựng các ứng dụng web động Tuy nhiên, DB2 là một cơ sở dữ liệu phổ biến khác được PHP hỗ trợ đầy đủ và cung cấp các lợi thế hấp dẫn hơn so với MySQL, làm cho nó trở thành một

sự lựa chọn lý tưởng cho nhiều ứng dụng

Loạt bài này mô tả tại sao việc di chuyển một ứng dụng PHP sang DB2 lại có ý nghĩa, cách chuẩn bị cho việc di trú, cách thực hiện nó, cách hỗ trợ nó, và cách xử lý các rủi ro tiềm năng dựa trên kinh nghiệm của các tác giả cho một cuộc di trú mới nhất Nhiều mẫu mã và mẫu cấu hình được cung cấp, cũng như các chỉ dẫn tài nguyên để giúp cho dự án chạy trơn tru

Với các ví dụ và các bài học thu được từ một việc chuyển đổi thực tế thành công, bạn sẽ thấy đây

có thể là một dự án đơn giản, có đủ tài liệu và cung cấp các lợi ích hấp dẫn

Loạt bài bốn phần này chia sẻ các bài học nhận được từ cuộc di trú MySQL-sang-DB2 thành công cho một ứng dụng mạng nội bộ PHP trọng yếu, cấp độ sản xuất, được 4.000 người dùng toàn cầu trong IBM sử dụng để hỗ trợ sản xuất nội dung cho ibm.com

 Phần 1 mô tả các bước cần thực hiện để chuẩn bị cho việc di trú

 Phần 2 mô tả các bước cần thực hiện để di trú cơ sở dữ liệu

 Phần 3 mô tả các bước cần thực hiện để chuyển đổi mã PHP

 Phần 4 mô tả các bước cần thực hiện để triển khai và hỗ trợ ứng dụng

Bạn sẽ học được những gì

Mục đích của loạt bài này là cho bạn hiểu những gì thường cần thiết để di trú một ứng dụng PHP

từ MySQL sang DB2, những tài nguyên nào có sẵn để trợ giúp bạn và một nhóm dự án của IBM

đã thực hiện nhiệm vụ này vào đầu năm 2010 như thế nào

Nếu bạn đã nghiên cứu một cuộc di trú từ MySQL sang DB2, bạn có thể đã thấy những giá trị

mà DB2 cung cấp dựa trên tài liệu sản phẩm, các đánh giá tiêu chuẩn về hiệu năng, các tính năng

mà bạn đã đọc trong tài liệu DB2, hoặc các so sánh trong các Sách Đỏ của IBM (IBM Redbooks

®) dành riêng cho nhiệm vụ này, bao gồm cuốn Hướng dẫn chuyển đổi MySQL sang DB2 (xem

Trang 2

Loạt bài này cung cấp cho bạn một ví dụ cụ thể về cuộc di trú thực tế đã được thực hiện thành công như thế nào trong năm 2010 cho một ứng dụng mạng nội bộ PHP được sử dụng rất nhiều trong IBM để hỗ trợ quản lý nội dung hàng ngày được công bố trên nhiều phần của trang Web ibm.com

Sau khi bạn đọc xong loạt bài này, bạn sẽ có thể tạo một trường hợp di trú tương tự, hiểu được thời hạn và các phụ thuộc của các mục công việc cần được thực hiện, dự kiến các rủi ro tiềm năng, và biết nơi để tìm kiếm sự hỗ trợ từng bước trên đường đi Tất cả điều này sẽ cho bạn sự tự tin hơn để lựa chọn DB2 và sử dụng nó một cách tốt nhất cho các ứng dụng PHP của bạn hiện đang được phát triển trên MySQL

Những gì không trình bày

Loạt bài này nhằm chia sẻ các bài học thu được từ một cuộc di trú nội bộ IBM từ MySQL sang DB2 và cung cấp cho bạn thông tin về tài nguyên có sẵn để thực hiện một công cuộc tương tự Loạt bài này không phải là một hướng dẫn toàn diện về di trú để có thể áp dụng được cho tất cả các kịch bản

Để xác định một cách tiếp cận phù hợp với bạn, hãy tham khảo Hướng dẫn chuyển đổi MySQL

sang DB2 hoặc liên hệ với SMPO (Software Migration Project Office - Văn phòng dự án di trú

phần mềm) để đánh giá di trú miễn phí Các liên kết này được cung cấp trong phần Tài nguyên

Về đầu trang

Giới thiệu về việc di trú mã

Bài này trình bày năm bước làm việc chính trong một nghiên cứu chi tiết để thực hiện di trú mã ứng dụng PHP từ chỗ đang sử dụng các trình điều khiển và cú pháp MySQL tới chỗ làm việc với DB2 Nếu cần, hãy tham khảo Phần 1 của loạt bài này để xem lịch trình các bước ấy trong quá trình di trú tổng thể trước khi tiến hành chuyển đổi

Bước 1: Bắt đầu bước chuyển đầu tiên trong di trú mã

 Đảm bảo cập nhật cấu hình PHP để hỗ trợ DB2

 Cập nhật các câu lệnh SQL riêng lẻ để hỗ trợ cú pháp DB2

 Mô phỏng các hàm MySQL nguyên gốc bằng cách sử dụng các hàm DB2 do người dùng định nghĩa, nếu cần

 Di chuyển logic xử lý từ SQL vào PHP, nếu cần

Bước 2: Bắt đầu bước chuyển thứ hai trong di trú mã

 Xem xét các thay đổi cần thiết để hỗ trợ các mức cách ly thích hợp

 Tổ chức lại các truy vấn thành các đơn vị công việc logic để đạt được tính toàn vẹn dữ liệu tốt hơn và cải thiện hiệu năng

Bước 3: Bắt đầu thử nghiệm trường hợp sử dụng nghiệp vụ khởi đầu với các bên liên quan

Trang 3

 Phối hợp các bên liên quan để thực hiện các trường hợp sử dụng đã quen thực hiện trong hệ thống cũ

 Nắm bắt các thất bại kiểm thử như là các khiếm khuyết cần được các nhà phát triển phân tích và sửa chữa

Bước 4: Giải quyết nút nghẽn cổ chai và xác nhận dựa vào vạch chuẩn chức năng

 Cải thiện hiệu năng của hệ thống dựa vào sự phản hồi của người dùng sau khi kiểm tra chức năng

 Tập trung vào những gì DB2 có thể sửa chữa tự động cho bạn, vì DB2 là sự thay đổi lớn nhất mà bạn đưa vào

 Giải quyết nút nghẽn cổ chai PHP bằng cách xem xét cách sử dụng tài nguyên của

hệ điều hành

Bước 5: Đánh giá vạch chuẩn di trú mã

 Sau khi hoàn thành theo cách lặp lại các bước trên, khai báo hoàn thành việc chuyển đổi mã

 Sao lưu hệ thống và gắn thẻ mốc quan trọng trong hệ thống kiểm soát mã nguồn của bạn

 Đánh giá mức độ chuẩn bị cần thiết cho nhiệm vụ tiếp theo: triển khai ứng dụng

Chương 8 và 10 trong Sách Đỏ miễn phí của IBM (IBM Redbook ®) Hướng dẫn chuyển

đổi MySQL sang DB2

Chương 4 và 6 trong Sách Đỏ miễn phí của IBM Phát triển các ứng dụng PHP cho Các

máy chủ dữ liệu IBM

 Bài viết trên developerWorks "Danh sách khuyến khích đọc: Phát triển ứng dụng DB2 cho Linux, UNIX, và Windows"

 Các mục blog của Daniel Krook về kinh nghiệm cá nhân của ông trong một dự án di trú cho một ISV

Tất nhiên các tài liệu về ngôn ngữ lập trình PHP và phần mở rộng của trình điều khiển DB2 cũng

là các phương tiện cần thiết

Một lựa chọn khác là sử dụng đám mây cho quá trình di trú Bạn có thể sử dụng Linux EC2 của Amazon và các AMI của DB2, hoặc đăng ký dùng IBM SmartCloud (tên cũ là Development and Test on the Cloud - Phát triển và Thử nghiệm trên Đám mây của IBM)(xem phần Tài nguyên )

Trang 4

Với ứng dụng ví dụ trong bài này, mã nguồn cho Project Tracking Tool (PTT - Công cụ theo dõi

dự án) bao gồm hàng trăm tệp PHP Cơ sở mã có các thư viện hàm, mã hướng-đối tượng được tổ chức thành các đối tượng truyền dữ liệu và các lớp của trình quản lý, các đoạn khuôn mẫu

HTML khác nhau và các trình trợ giúp để biểu hiện giao diện người dùng

Cơ sở dữ liệu PTT được sử dụng với các hàm khác nhau để hỗ trợ luồng công việc cung cấp thông tin được công bố trên ibm.com Hơn 4.000 người dùng trên toàn thế giới truy cập và sửa đổi cơ sở dữ liệu PTT thông qua mặt tiền web PHP Tại bất kỳ thời điểm nào, đều có hàng trăm người dùng đang hoạt động đồng thời trên hệ thống

Mã này được triển khai vào một máy chủ web Apache, nó nạp tệp mod_php như là một mô đun chia sẻ

Trong ví dụ này, mã hiện có đã được cập nhật cho hệ thống DB2 mới, chủ yếu là bằng cách thực hiện các sửa đổi với SQL nhúng Các sửa đổi nhỏ khác bắt buộc phải làm là cập nhật cấu hình PHP để sử dụng trình điều khiển DB2 và điều chỉnh mã kết nối cơ sở dữ liệu, sử dụng một chuỗi kết nối mới Bài này cũng xác định và tập trung vào một số cải tiến cấu trúc ứng dụng để hoàn thiện hơn khung kiến trúc mô hình-khung nhìn-trình điều khiển (MVC) nhằm cải tiến chất lượng,

tổ chức và bảo trì ứng dụng

Về đầu trang

Cài đặt phần mềm chuyển đổi

Để chuẩn bị cho việc chuyển đổi mã ví dụ, hãy cài đặt các thành phần sau đây trên một máy trạm Windows được sử dụng để thực hiện các bước chuyển đổi

Một phiên bản của bản sao MySQL của cơ sở dữ liệu nguồn

Để kiểm tra mỗi thay đổi mã, điều quan trọng là có một bản sao của hệ thống cũ sẵn sàng

để sử dụng làm một tham chiếu chức năng để xác nhận hợp lệ các thay đổi cho hệ thống mới bên cạnh hệ thống cũ Bạn có thể sử dụng chính hệ thống như bạn đã làm trong Phần 2

Một phiên bản DB2 với các trình điều khiển máy chủ dữ liệu được cài đặt cục bộ hoặc trên một máy chủ thử nghiệm

Cài đặt DB2 để tạo cơ sở dữ liệu đích mới trên máy trạm Nói chung, cơ sở dữ liệu này không nhất thiết là ấn bản giống như cơ sở dữ liệu được sử dụng trong sản xuất, nhưng để tương thích tính năng hoàn toàn, một ý tưởng tốt là nên chọn cùng ấn bản Để làm theo các ví dụ trong bài này, hãy cài đặt Ấn bản máy chủ doanh nghiệp của DB2 (DB2

Enterprise Server Edition) Phiên bản 9.7.2 Đảm bảo rằng các trình điều khiển của máy chủ dữ liệu có sẵn để cung cấp các thư viện khách PHP cần thiết Bạn có thể sử dụng chính hệ thống như bạn đã làm trong Phần 2

Một phiên bản PHP được xây dựng với phần mở rộng ibm_db2 hoặc PDO_IBM (PHP Data Objects)

Tải về phiên bản mới nhất của Zend Server và chọn phần mở rộng DB2 tùy chọn, có yêu cầu cài đặt các gói bổ sung

Trang 5

Một môi trường phát triển tích hợp (IDE), ví dụ Zend Studio hoặc Các công cụ phát triển PHP (PDT) của Eclipse

Sử dụng một IDE nhận biết-PHP, ví dụ Zend Studio hoặc Các công cụ phát triển PHP của Eclipse, để dễ dàng phát triển PHP của bạn Vì bạn duy trì một ứng dụng PHP, nên nhiều khả năng là bạn đã có một công cụ ưa thích

Hãy chắc chắn ghi lại chi tiết các quyết định cấu hình và các bài học thu được của bạn để cho bạn có thể lặp lại các bước khi triển khai Xem xét việc ghi lưu một ảnh chụp của hệ điều hành Windows thành một ảnh ảo tại các cột mốc chính mỗi khi đạt được các đích quan trọng để dùng làm các bản sao lưu cấu hình và các vạch chuẩn để so sánh cải thiện tiếp mã lệnh

Nếu bạn muốn chụp một ảnh của một cấu hình máy tính vật lý, bạn có thể làm điều đó bằng VMware vCenter Converter miễn phí Một cách thay thế khác là xem xét dùng đám mây cho các thay đổi năng động này Bạn có thể sử dụng các AMI DB2 cho EC2 của Amazon, hoặc bạn có thể đăng ký dùng IBM SmartCloud (tên cũ là Development and Test on the IBM Cloud) Với các máy tính ảo, bạn sẽ có thể tránh được các cố gắng ban đầu để mua phần cứng máy chủ và cài đặt một hệ điều hành và DB2, điều này sẽ tiết kiệm thời gian, tăng tốc độ di trú, và mang lại cho bạn

sự tự tin để trải nghiệm với cấu hình phù hợp nhất cho các nhu cầu của bạn Có thể tìm thấy các liên kết đến tất cả các sản phẩm này trong phần Tài nguyên

Về đầu trang

Bước 1: Bắt đầu một bước chuyển đầu tiên về di trú mã

Bước chuyển đổi mã quan trọng đầu tiên là cấu hình cơ sở hạ tầng PHP và DB2 mới và chuyển đổi cách ứng dụng sử dụng PHP và SQL để truy cập dữ liệu Bước này liên quan đến các bước nhỏ sau:

 Cập nhật cấu hình và trình điều khiển PHP

 Chuyển đổi cú pháp SQL

 Tạo các hàm do người dùng định nghĩa để mô phỏng MySQL

 Di chuyển logic từ SQL vào PHP, nếu cần

Cập nhật cấu hình và trình điều khiển PHP

Đảm bảo rằng cấu hình PHP hiện có được sửa đổi để hỗ trợ trình điều khiển của DB2, để khớp với bộ mã hóa ký tự cơ sở dữ liệu máy chủ và để cung cấp các thông báo chẩn đoán quan trọng thông qua cảnh báo và các thông báo lỗi đầy đủ mọi chi tiết

Để cập nhật mã PHP cho DB2, bạn sẽ thường thay đổi từng điểm trong mã ở đó các hàm mở rộng ibm_db2 được sử dụng hoặc cập nhật chuỗi kết nối PDO_IBM để thực hiện giao diện PDO (Các đối tượng dữ liệu PHP) Nếu bạn sử dụng PDO như một thư viện trừu tượng hóa cơ sở dữ liệu trong hệ thống dựa trên MySQL của mình, các thay đổi mã của bạn sẽ không đáng kể Đó chỉ là vấn đề thay đổi một chuỗi kết nối duy nhất Nhưng cho dù là bạn đang sử dụng phần mở rộng thủ tục ibm_db2, nhiệm vụ này cũng đơn giản Bạn có thể thay thế bình thường bất kỳ các hàm nào bắt đầu với mysql_ hoặc mysqli_ trong mã của bạn bằng các tiền tố db2_ tương đương

Trang 6

Xem phần 6.3 Chương 6 về Phát triển các ứng dụng PHP cho các máy chủ dữ liệu của IBM

trong Sách Đỏ của IBM (xem phần Tài nguyên) để biết các bảng ánh xạ tương ứng các hàm và

mã mẫu

Cả hai phương thức kết nối đều dựa vào máy khách DB2 làm một cầu nối để nối đến máy chủ DB2, vì vậy bạn cần xác nhận rằng máy khách DB2 đã được cấu hình khớp với các thiết lập trên máy chủ từ xa Cụ thể, bạn cần đảm bảo chắc chắn rằng trang mã ký tự của máy khách DB2 giống như trang mã ký tự của máy chủ DB2, nếu không, bạn sẽ gặp khó khăn với các bộ ký tự Với ví dụ này, hãy chạy lệnh được hiển thị trong Liệt kê 1 để thiết lập bộ mã hóa ký tự máy khách là UTF-8, sẽ phù hợp với lệnh CREATE DATABASE trong Liệt kê 1 trong Phần 2

Liệt kê 1 Thiết lập trang mã máy khách DB2 thành UTF-8

Liệt kê 3 Thiết lập các tham số kiểm soát lỗi trong php.ini

8.1 các điểm giống nhau và khác nhau của Ngôn ngữ thao tác dữ liệu trong Sách Đỏ Hướng dẫn

chuyển đổi MySQL sang DB2 để xem một danh sách các phép chuyển đổi cú pháp phổ biến Sau

đây là một vài tình huống trong ứng dụng nghiên cứu chi tiết

Trang 7

Cách xử lý ký tự đại diện của mệnh đề SELECT

Các câu lệnh SELECT sử dụng một ký tự đại diện (ký tự dấu hoa thị) để chọn cột cụ thể bên cạnh tất cả các cột của nhiều bảng là hợp pháp trong MySQL, nhưng chúng lại không được phép trong DB2 Trong trường hợp này, thêm tên bảng (hoặc bí danh) đầy đủ vào trước ký tự đại diện, chỉ rõ mỗi cột của mỗi bảng mà bạn đang quan tâm đến hoặc đơn giản là liệt kê tất cả các cột trong mỗi bảng với một ký tự đại diện duy nhất Liệt kê 4 cho thấy cách sửa đổi các truy vấn như vậy

Liệt kê 4 So sánh các ký tự đại diện của cột và bảng hợp pháp trong MySQL và DB2

In MySQL:

SELECT R.NAME, *

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID;

In DB2:

SELECT R.NAME, U.*

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID;

Or

SELECT R.NAME, U.ID, U.NAME, U.ROLE_ID, U.DEPART_ID

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID;

Mệnh đề SELECT quy định cụ thể kích thước tối đa của tập kết quả với LIMIT

LIMIT (Giới hạn) là một từ khóa không chuẩn, chỉ duy nhất của MySQL quy định cụ thể

số lượng tối đa các hàng được trả về từ một truy vấn DB2 sử dụng cú pháp FETCH FIRST

n ROWS ONLY cho cùng một mục đích Liệt kê 5 cho bạn thấy cách viết lại truy vấn với DB2

Liệt kê 5 Quy định số lượng tối đa các hàng được trả về từ một truy vấn trong MySQL và DB2

Liệt kê 6 So sánh các phép gộp GROUP BY hợp pháp trong MySQL và DB2

In MySQL:

SELECT R.ID, R.NAME, COUNT(U.ID) AS NUM

FROM USER U, ROLE R

Trang 8

WHERE U.ROLE_ID = R.ID

GROUP BY R.ID;

In DB2:

SELECT R.ID, MIN(R.NAME), COUNT(U.ID) AS NUM

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.ID;

Or

SELECT R.ID, R.NAME, COUNT(U.ID) AS NUM

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.ID, R.NAME;

Trong Liệt kê 6, bạn có thể cập nhật GROUP BY, vì cả hai R.ID và R.NAME là khóa duy nhất trong bảng này Liệt kê 7 cho thấy một loại truy vấn GROUP BY khác không thể xử lý đơn giản như truy vấn trong Liệt kê 6

Liệt kê 7 GROUP BY không rõ ràng trong MySQL cần được sửa đổi cho DB2

In MySQL:

SELECT R.ID, R.NAME, COUNT(U.ID) AS NUM

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.NAME;

Trong trường hợp này, R.ID là duy nhất trong bảng, nhưng R.NAME thì không Nếu có bản sao giá trị R.NAME trong bảng ROLE, thì bạn không thể thay thế R.ID bằng MIN(R.ID) và bạn không thể thêm R.ID vào mệnh đề GROUP BY Cách bạn chuyển đổi SQL này như thế nào phụ thuộc vào bạn mong đợi kết quả dạng nào Liệt kê 8 cho thấy một vài tùy chọn cho tình huống này

Liệt kê 8 Truy vấn GROUP BY đã dịch trong DB2

R.NAME, COUNT(U.ID) AS NUM

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.NAME;

Option 2, if role name is same, treat it as same role In this case, the result is a little different from MySQL version in that there is no R.ID:

SELECT R.NAME, COUNT(U.ID) AS NUM

Trang 9

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.NAME;

Option 3, if role ID is different, treat them as different role

In this case, the result is totally different than the MySQL version: SELECT R.ID, R.NAME, COUNT(U.ID) AS NUM

FROM USER U, ROLE R

WHERE U.ROLE_ID = R.ID

GROUP BY R.ID, R.NAME;

REPLACE INTO trong MySQL so với MERGE trong DB2

MySQL cung cấp một mệnh đề REPLACE INTO DB2 cung cấp một mệnh đề MERGE cho một mục đích tương tự, nhưng không tương đương Để đạt được kết quả tương đương, hãy tạo ra một bản ghi mới hoặc thay thế một bản ghi hiện có nếu nó có khóa chính giống nhau hoặc giá trị duy nhất Liệt kê 9 cho thấy cách kiểm tra một giá trị duy nhất trong bảng và hoặc cập nhật hoặc chèn các giá trị

Liệt kê 9 Dịch cú pháp REPLACE INTO của MySQL sang DB2

In MySQL:

REPLACE INTO ROLE (ID, NAME, DESCRIPTION)

SELECT ID, NAME, DESCRIPTION

FROM ROLE_TMP;

In DB2:

MERGE INTO ROLE R

USING (SELECT ID, NAME, DESCRIPTION FROM ROLE_TMP) RT

ON (R.ID = RT.ID)

WHEN MATCHED THEN

UPDATE SET (ID, NAME, DESCRIPTION) = (RT.ID, RT.NAME, RT.DESCRIPTION)

WHEN NOT MATCHED THEN

INSERT (ID, NAME, DESCRIPTION) VALUES (RT.ID, RT.NAME, RT.DESCRIPTION);

Mệnh đề JOIN

Khi thực hiện một phép nối (join) ngoài với một cặp bảng đồng thời cũng lấy ra dữ liệu

từ một bảng thứ ba, hãy chỉ rõ các bảng được sử dụng cho phép nối ngoài kề ngay bên cạnh các từ khóa JOIN trong DB2 MySQL cho phép chúng được liệt kê theo bất kỳ thứ

tự nào Liệt kê 10 cho thấy sự thay đổi cần thiết

Liệt kê 10 So sánh cú pháp JOIN của MySQL và DB2

Both of the following work in MySQL:

SELECT *

FROM USER U, ROLE R

LEFT JOIN DEPARTMENT D

ON U.DEPT_ID = D.ID;

Or

SELECT *

FROM ROLE R, USER U

LEFT JOIN DEPARTMENT D

ON U.DEPT_ID = D.ID;

Trang 10

Only this one works in DB2:

SELECT * FROM ROLE R, USER U

LEFT JOIN DEPARTMENT D

ON U.DEPT_ID = D.ID;

Các ký tự thoát

Ký tự \ biểu diễn một dấu gạch chéo ngược là mã thoát áp dụng cho dấu nháy đơn ' trong MySQL, nhưng trong DB2, một dấu nháy đơn phải được áp mã thoát bằng cách thêm một dấu nháy đơn khác " (hai dấu nháy đơn) Liệt kê 11 cho thấy một ví dụ về các dãy

mã thoát cho một chuỗi ký tự sử dụng một dấu nháy đơn như là một dấu móc lửng

Liệt kê 11 MySQL sử dụng dấu gạch chéo ngược để áp mã thoát cho các dấu nháy đơn, trong khi ở đó DB2 sử dụng một dấu nháy đơn thứ hai

In MySQL:

SELECT * FROM ROLE

WHERE DESCRIPTION = 'It\'s a super admin role';

In DB2:

SELECT * FROM ROLE

WHERE DESCRIPTION = 'It''s a super admin role';

Kiểm tra ngoài phạm vi trong DB2

MySQL không bắt buộc đúng phạm vi cho một kiểu dữ liệu trong một mệnh đề SELECT, nhưng DB2 thì có Do đó SQL được hiển thị trong Liệt kê 12 để truy vấn thông tin trong khoảng thời gian từ 01.02 và 30.02 không làm việc trong DB2, nhưng nó làm việc trong MySQL

Liệt kê 12 MySQL không kiểm tra dải các giá trị cho các mệnh đề WHERE dựa vào kiểu

dữ liệu

MySQL allows you to specify February 30th as part of the range

SELECT * FROM USER

WHERE BIRTHDAY BETWEEN '1980-02-01' AND '1980-02-30';

CHÈN vào một cột NOT NULL không cần một giá trị mặc định

Trong MySQL, nếu bạn cố gắng thực hiện một câu lệnh INSERT mà không cung cấp một giá trị cho một cột NOT NULL, thì lệnh này vẫn thành công MySQL tự động điền vào một giá trị mặc định, ngay cả khi bạn chưa bao giờ định nghĩa một giá trị mặc định cho cột đó khi tạo bảng Tuy nhiên, trong DB2, bạn phải cung cấp một giá trị cho các cột NOT NULL trong một câu lệnh INSERT khi vẫn chưa đinh nghĩa một giá trị mặc định Các câu lệnh SQL trong Liệt kê 13 cho thấy các hành vi xử lý khác nhau

Liệt kê 13 MySQL và DB2 xử lý chèn các giá trị NULL một cách khác nhau

Works in both MySQL and DB2

CREATE TABLE TEST1 (ID INTEGER, NAME VARCHAR(20) NOT NULL);

Works in MySQL, doesn't work in DB2

INSERT INTO TEST1 (ID) VALUES(1);

Trang 11

Works in both MySQL and DB2

CREATE TABLE TEST2 (ID INTEGER, NAME VARCHAR(20) NOT NULL DEFAULT '');

Works in both MySQL and DB2

INSERT INTO TEST2 (ID) VALUES(1);

Sử dụng các chế độ tương thích mới của DB2

Trong khi bạn có thể mô phỏng một số cú pháp MySQL bằng cách sử dụng các hàm do người dùng định nghĩa, có một lựa chọn khác là thiết lập một trong các chế độ tương thích dành cho các phiên bản của DB2 sau phiên bản 9.7.2 Đọc thêm về kích hoạt cú pháp LIMIT và OFFSET trên blog của Antonio Cangiano

Chuyển đổi các hàm của MySQL thành các hàm tương tự của DB2

Bên cạnh SQL đặc thù riêng của MySQL, bạn cũng có thể đang sử dụng các hàm

MySQL dựng sẵn Bạn có thể thay thế các hàm này bằng các hàm SQL tiêu chuẩn hoặc các hàm tương đương có sẵn trong DB2 Tham khảo Phụ lục A: Ánh xạ các hàm dựng

sẵn và các toán tử của MySQL trong Sách Đỏ Hướng dẫn chuyển đổi MySQL sang DB2

(xem phần Tài nguyên)

Như vừa được mô tả, nếu bạn không thể tìm thấy một hàm tương đương của DB2, thì bạn có thể viết lại SQL của mình để truy cập dữ liệu theo một cách khác Ngoài ra, bạn có thể chọn mô phỏng hàm đó trong DB2 hoặc di chuyển logic vào mã PHP của mình, như được mô tả trong các phần sau

Tạo các hàm do người dùng định nghĩa để mô phỏng các tính năng của MySQL

Nếu bạn không thể chỉ cập nhật các câu lệnh SQL theo cú pháp DB2 để đạt được cùng kết quả như các truy vấn MySQL của bạn, thì bạn có thể khắc phục bằng một cách khác dưới dạng một hàm do người dùng định nghĩa (UDF) trong SQL của DB2 để mô phỏng một hàm MySQL dựng sẵn

Đã có một số chỗ sử dụng MySQL và PHP trong kịch bản ví dụ cần được tiếp cận theo cách khác khi cập nhật ứng dụng để sử dụng DB2 Cụ thể, bạn có thể di chuyển một số chức năng ra khỏi MySQL đưa vào PHP, ví dụ như khi thực hiện chuyển dịch ngày Hoặc bạn có thể mô phỏng hàm trong DB2, ví dụ như để tạo các hàm do người dùng định nghĩa trong DB2 cho gần giống một số hàm được xây dựng trong MySQL, bao gồm cả UNIX_TIMESTAMP() và NOW()

Phụ lục B trong Sách Đỏ Hướng dẫn chuyển đổi MySQL sang DB2 (xem phần Tài nguyên) giải thích các sự khác biệt và đưa ra một cách tiếp cận để giải quyết các thay đổi Những mẹo nhỏ của Daniel Krook đã thu thập được từ kinh nghiệm di trú của khách hàng của ông cũng rất có ích (xem phần Tài nguyên)

DML của DB2 khác với MySQL Bài này mô tả cách chuyển đổi các SQL nhúng từ MySQL sang DB2 Tuy nhiên, không cần thiết chuyển đổi tất cả cú pháp từ MySQL sang DB2, đặc biệt

là đối với các hàm dựng sẵn của MySQL Phụ lục A Ánh xạ các hàm dựng sẵn và các toán tử

Ngày đăng: 24/03/2014, 06:20

HÌNH ẢNH LIÊN QUAN

Hình 1. Các mức cách ly trong DB2 - Di chuyển một ứng dụng PHP từ MySQL sang DB2, Phần 3: Chuyển đổi mã PHP của bạn doc
Hình 1. Các mức cách ly trong DB2 (Trang 14)
Bảng 1. Bài kiểm thử chấp nhận bởi người dùng mẫu - Di chuyển một ứng dụng PHP từ MySQL sang DB2, Phần 3: Chuyển đổi mã PHP của bạn doc
Bảng 1. Bài kiểm thử chấp nhận bởi người dùng mẫu (Trang 18)
Hình 2. Tinh chỉnh một truy vấn trong IBM Data Studio - Di chuyển một ứng dụng PHP từ MySQL sang DB2, Phần 3: Chuyển đổi mã PHP của bạn doc
Hình 2. Tinh chỉnh một truy vấn trong IBM Data Studio (Trang 21)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w