MySQL hỗ trợ tiếng Việt.
Implement Vietnamese Collation in MySQL
MySQL has yet to integrate support for Vietnamese Collation (Bug #4745). You can, in the meantime, add the missing collation simply by replacing the Index.xml file in <MySQL Server 5.x>\share\charsets directory with this Index.xml, which implements the Vietnamese collation for both utf8 and ucs2 charsets. As a result, you will have native support for both sort and compare operations in MySQL 5.x Community Server. (Be sure to restart the database server for it to read in the new collations.)
Using MySQL Administrator or Query Browser tool, you can set the Charset and Collation for Table and Columns when you get to MySQL Table Editor dialog. With the modified Index.xml installed, you can see the new Vietnamese Collations after selecting either utf8 or usc2 for Charset.
With the new collations, you can run the query as follows, assuming your table has a column with one character of the Vietnamese alphabetical set in each row:
SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese1_ci;
would return ‘a’, ‘à’, ‘ả’, ‘ã’, ‘á’, ‘ạ’, and their capitals, not necessarily in any order. The same result would also be returned for any diacritical variation of the character ‘a’ in the WHERE clause.
On the other hand, the query
SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese2_ci;
would return only ‘a’ and ‘A’.
To put the result set in Vietnamese alphabetical order, add the ORDER BY clause with appropriate collation:
SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese1_ci ORDER BY letter COLLATE utf8_vietnamese2_ci;
References:
Aethros 9285 và 928X trên Karmic 9.10
Trên Ubuntu Karmic 9.10, các card wifi này đều hoạt động, nhưng tín hiệu kém, yếu hơn nhiều so với khi chạy trên windows.
Để có tín hiệu mạnh hơn, ta phải làm 2 việc:
- Cài đặt wicd thay cho Gnome network manager.
sudo apt-get install wicd
- Cài đặt module backport cho kernel
sudo apt-get install linux-backports-modules-karmic
Có 2 lệnh vậy thôi mà làm mình mất 2 ngày để lục lọi từ ubuntuforums đến các thể loại hầm bà lằng khác! Thật sự bó tay!
Lật ngược cái webcam lại nào!!!
Sau hai ngày lăn lộn, cuối cùng cũng lộn ngược được cái webcam của ASUS K40IN về đúng chiều! Chấm dứt 2 hôm cầm lộn ngược máy tính để skype
Thêm dòng này vào trong /etc/apt/sources.list.d/libv4l.list: deb http://ppa.launchpad.net/libv4l/ppa/ubuntu karmic main
Rồi chạy lệnh:
sudo apt-get install libv4l-0
Với mỗi 1 chương trình dùng webcam, ví dụ như skype, thay vì chạy lệnh /usr/bin/skype để kích hoạt chương trình, ta phải chạy một lệnh loằng ngoằng hơn: LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype
Done!
Ubuntu Karmic 9.10 on ASUS K40IN T6600
dinhtrung@dinhtrung-laptop:~$ lspci
00:00.0 Host bridge: nVidia Corporation MCP79 Host Bridge (rev b1)
00:00.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.0 ISA bridge: nVidia Corporation MCP79 LPC Bridge (rev b3)
00:03.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.2 SMBus: nVidia Corporation MCP79 SMBus (rev b1)
00:03.3 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.5 Co-processor: nVidia Corporation MCP79 Co-processor (rev b1)
00:04.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:04.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:08.0 Audio device: nVidia Corporation MCP79 High Definition Audio (rev b1)
00:09.0 PCI bridge: nVidia Corporation MCP79 PCI Bridge (rev b1)
00:0b.0 SATA controller: nVidia Corporation MCP79 AHCI Controller (rev b1)
00:10.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:15.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:16.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
02:00.0 VGA compatible controller: nVidia Corporation C79 [GeForce
G102M] (rev b1)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
04:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)
dinhtrung@dinhtrung-laptop:~$
dinhtrung@dinhtrung-laptop:~$
dinhtrung@dinhtrung-laptop:~$ lsusb
Bus 001 Device 002: ID 04f2:b071 Chicony Electronics Co., Ltd 2.0M UVC WebCam / CNF7129
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 1c4f:0003 SiGma Micro
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
dinhtrung@dinhtrung-laptop:~$
Nói chung vấn đề lớn nhất gặp phải với dòng máy này là:
- Không cấu hình được Touchpad.
- Webcam bị lộn ngược.
- Wifi chập chờn lúc được lúc không.
Còn lại thì ổn cả.
Sử dụng Google Calendar trên Thunderbird
Để sử dụng được Google Calendar trên Thunderbird, ta phải cài 2 extension là Lightning và Provider for Google Calendar.
1.Mở Thunderbird 3.03, Công cụ > Tiện ích.
2.Trong thẻ Lấy thêm tiện ích, nhập vào từ khóa Lightning và Enter, rồi nhấn vào tiện ích Lightning.
3. Nhập tiếp Google Calendar để tìm kiếm Provider for Google Calendar, rồi cài thêm tiện ích này.
4. Khởi động lại Thunderbird.
Sau khi khởi động lại, ta có thể bắt đầu cấu hình Lightning để đồng bộ dữ liệu với Google Calendar như sau:
- Mở Lightning bằng cách chọn Sự kiện và tác vụ > Lịch.
- Chọn Tập tin > Lịch mới.
- Chọn Google Calendar.
- Mở trang calendar.google.com, bấm vào danh sách lịch và chọn Cài đặt lịch cho cuốn lịch muốn đồng bộ.
- Nhấp vào nút XML ở phần Địa chỉ lịch. Cóp vào trong Thunderbird.
Điền Form với jQuery Populate.
jQuery Populate là một plugin giúp tự động điền dữ liệu vào form từ một chuỗi JSON. Plugin này giúp ta tự động điền giá trị của Form ngay khi người dùng mở trang web, hoặc cập nhật thông tin từ server.
Với PHP5, ta có thể cung cấp json dễ dàng nhờ hàm json_encode() được tích hợp sẵn.
Ví dụ đơn giản:
<form id="my-form" method="post">
<label>Username</label>
<input name="username" value="" id="username" maxlength="40" type="text"><br>
<label>Role</label>
<select name="role" id="role">
<option value="0">admin</option>
<option value="1">editor</option>
<option value="2">user</option>
</select><br>
<label>Sex</label>
<input name="sex" value="male" class="check" id="aa8da" type="radio">
<input name="sex" value="female" class="check" id="c19cb" type="radio">
<input name="sex" value="unknown" class="check" id="ccf23" type="radio">
<hr>
<input name="submit" value="Gửi" id="submit" type="submit">
<input name="reset" value="Nhập lại" id="reset" type="reset"><br>
</form>
<button type="button" id="populate-form">Populate Default Values<button>
<button type="button" id="request-populate-form">Request and Populate</button>
<script type="text/javascript">
$(document).ready(function(){
$("#populate-form").click(function(){
$("#my-form").populate({"username" : "Username that you like", "Role" : 1, "Sex" : "unknown"});
});
$("#request-populate-form").click(function(){
$.getJSON("populate.php", function(jsonobj){$("#my-form").populate(jsonobj)});
});
});
</script>
Ở form trên, có 2 nút. Nút Populate Default Value demo việc sử dụng jQuery Populate để điền form ngay khi người dùng mở trang web.
Nút Request and Populate demo việc gửi một truy vấn tới server, cụ thể là tới file populate.php để lấy các giá trị cần điền vào form. Trên server ta cần tạo thêm một PHP file tên là populate.php với nội dung sau:
<?php
$data = array('username' => 'demo', 'role' => 2, 'sex' => 'unknown');
echo json_encode($data);
?>
Trung đổi số điện thoại, mong mọi người update giúp.
Hi all,
Tuần vừa rồi mình mất máy di động nên giờ số điện thoại cũ : 01685287522 mình không còn sử dụng nữa.
Hiện tại mình đang dùng hai số này:
- 0926843166
- 01997785235
Mong mọi người update lại giúp Trung nhé. Thanks.
Sử dụng tính năng tạo bài viết qua Email trên WordPress
WordPress cho phép ta tạo các bài viết thông qua Email.
Sau khi đăng nhập vào WordPress admin (http://yourname.wordpress.com/wp-admin), ta chọn mục Trang web của tôi.
Trong trang này, ta thấy ở phía bên phải có cột Post by Email. Bấm dấu kiểm trong hộp đó, ta nhận được một địa chỉ email đặc biệt để gửi bài viết tới.
Ngoài ra, ở ngay cột trước đấy, ta còn có thể yêu cầu WordPress lấy tin từ Facebook, Twitter và đăng tải lên ngay khi ta viết tin trên các ứng dụng này. Quy trình sẽ bao gồm việc đăng nhập vào tài khoản Facebook hay Twitter để xác nhận.
Xóa dữ liệu trùng lặp trong MySQL
Với 3 lệnh đơn giản, ta có thể lọc toàn bộ một bảng MySQL, xóa đi các dòng có một trường giống nhau.
mysql > CREATE TABLE new_table as
--------> SELECT * FROM old_table WHERE 1 GROUP BY [tên_cột_cần_lọc];
mysql > DROP TABLE old_table;
mysql > RENAME TABLE new_table TO old_table;
Peace of cake, huh?
Thiết kế CSDL với Dia
Thiết kế CSDL với Dia
Trong bài viết này, tôi sẽ giới thiệu sơ bộ về cách tạo cấu trúc CSDL với Dia. Trong quá trình thiết kế, việc sử dụng hình ảnh để mô tả một CSDL quan hệ sẽ giúp nhà phát triển có cái nhìn trực quan và tổng quát về hệ thống. Tuy nhiên, quá trình mô tả bằng hình vẽ gặp nhiều khó khăn, nhất là khâu cập nhật mỗi khi có thay đổi trong việc thiết kế. Mỗi khi tạo thêm một cột mới, hoặc thay đổi thiết kế, bạn phải sửa lại sơ đồ của mình để đồng bộ nó với nội dung SQL cần thực thi. Ngoài ra, vì mỗi một hệ CSDL đều có cú pháp riêng, khiến cho việc đồng bộ sơ đồ CSDL với tập lệnh tạo ra CSDL đó cho mỗi nền CSDL thành ra càng khó khăn hơn. Vì vậy, bài viết này sẽ hướng dẫn bạn cách ứng dụng Dia để thiết kế CSDL hiệu quả hơn.
Dia là một chương trình để thiết kế sơ đồ. Trong bài viết này, ta sẽ sử dụng tính năng thiết kế UML trong Dia để tạo sơ đồ CSDL. Ngoài ra, bằng việc sử dụng tedia2sql, một văn lệnh Perl giúp chuyển đổi từ sơ đồ Dia sang lệnh SQL, ta có thể lấy được mã lệnh tương ứng với CSDL trên nền CSDL mình cần.
Trước tiên, ta phải cài đặt Dia và tedia2sql. Tải tedia2sql tại đây, và Dia tại đây. Cách cài đặt thì tùy vào bản phân phối Linux bạn có. Nếu không dùng Linux, thì bạn nên thử xem!
Cũng dễ thôi mà!
Mở Dia, tạo một đồ hình mới và lưu nó dưới dạng “employee.dia”. Chọn bộ đối tượng UML từ danh sách các mẫu đồ hình. Bằng cách sử dụng các đối tượng UML ta có thể biểu diễn các bảng và định nghĩa cụ thể các thành phần cấu thành nên CSDL của mình. Dưới đây xin phép tổng hợp lại các thành phần UML chính và cách sử dụng chúng:

Class (Lớp) biểu diễn một bảng trong CSDL. Tên lớp chính là tên bảng trong CSDL, và các thuộc tính của lớp sẽ tương ứng với các trường trong bảng. Thuộc tính có thể là public (công), private (riêng) hay protected (được bảo vệ). Những thuộc tính được bảo vệ sẽ tương ứng với khóa chính của bảng. Ta sẽ đi sâu tìm hiểu lớp trong phần sau.
|
Giờ ta sẽ bắt tay vào việc tạo bảng đầu tiên. Chọn đối tượng Class trong mục đối tượng UML rồi bấm chuột trái vào trong cửa sổ soạn thảo sơ đồ. Bấm chuột phải trong lớp mới tạo và chọn “Show properties” (“Thuộc tính”). Hộp thoại thuộc tính lớp sẽ hiện lên. Ta sẽ phải chỉnh sửa lại một số thuộc tính được liệt kê dưới đây.
Trước hết, trong thẻ “Class” (“Lớp”), gõ tên bảng (employee) vào trong trường “Class Name” (“Tên lớp”). Tiếp đó nhấn chọn thẻ “Attributes” (“Thuộc tính”) rồi gõ vào các thuộc tính lớp, ứng với các cột trong bảng. Trong trường “Type: “ (“Kiểu: “), nhập kiểu dữ liệu SQL mà cột này sử dụng, như INT, VARCHAR hay BOOL. Nếu muốn đồ hình của mình hỗ trợ nhiều nền tảng CSDL khác nhau, hãy sử dụng các kiểu dữ liệu chuẩn ANSI SQL 1992, hoặc sử dụng ánh xạ kiểu. Ta sẽ bàn luận thêm về ánh xạ kiểu sau. Trong trường “Value: “ (“Giá trị”), ta nhập giá trị mặc định của trường (“NOT NULL” chả hạn). Nếu cột được thêm vào là một khóa chính, ta chọn “Protected” trong trường “Visibilitiy: “ (“Khả kiến”). Lưu ý rằng với các khóa chính, ta không cần nhập “NOT NULL” vào trong ô “Value :”. Ảnh chụp màn hình dưới đây minh họa cho quá trình sửa thuộc tính của Lớp.

Tiếp tục tạo thê các bảng có trong CSDL. Ví dụ, ta có 2 bảng “employee” và “department” với các cột như hình vẽ bên dưới (lưu ý là dấu ‘#’ ở phía trước một thuộc tính biểu diễn độ khả kiến “Protected”, ứng với trường khóa chính của bảng):
Ví dụ trên mô tả quan hệ của 2 bảng chứa dữ liệu về nhân viên và phòng ban mà họ làm việc. Giả dụ ta có một danh sách các phòng ban mặc định, được thêm vào ngay khi CSDL được tạo ra. Để thực hiện điều này, ta sử dụng đối tượng “Component” trong các đối tượng UML. Chọn đối tượng “Component” và thêm nó vào trong cửa sổ soạn thảo đồ hình. Bấm phải vào đối tượng mới thêm, và chọn “Properties” (“Thuộc tính”).

Trong hộp thoại hiện ra, ta nhập giá trị sẽ dùng trong câu lệnh “INSERT INTO” vào trường “Stereotype: “. Lấy ví dụ, để thêm vào danh sách mặc định các phòng ban, ta cần viết các câu SQL sau:
insert into department (department_id, name) values (1, 'Marketing'); insert into department (department_id, name) values (2, 'Production'); insert into department (department_id, name) values (3, 'Design');
Vì vậy, trường “Stereotype: ” sẽ chứa nội dung là “department (department_id, name)”. Nhấn OK để đóng hộp thoại thuộc tính thành phần. Tiếp đến, trong hộp đối tượng Component, ta nhập các giá trị muốn thêm vào, mỗi giá trị một dòng.

Giờ ta sẽ nói về ánh xạ kiểu. Các ánh xạ kiểu được dùng khi bạn muốn cấu hình các kiểu dữ liệu tự định nghĩa. Ví dụ, ta có thể tạo ánh xạ kiểu cho dữ liệu có thuộc tính auto_increment trong MySQL. Đây là một tính năng mà MySQL hỗ trợ, nhưng các nền CSDL khác thì chưa chắc đã có. Giả dụ rằng ta có một trường khóa chính với thuộc tính auto_increment này. Nhưng ta muốn CSDL của mình vừa dùng được cho MySQL, vừa dùng được cho Apache Derby. Vì cách khai báo trên 2 nền CSDL này khác nhau, nên ta sẽ sử dụng một ánh xạ kiểu tự chọn và đặt SQL riêng cho từng nền CSDL.
Các ánh xạ kiểu được tạo bằng đối tượng Small Package.
Trong trường “Stereotype: ” ta nhập nền CSDL muốn dùng. Ví dụ, “mysql: typemap”. Để biết các nền CSDL nào mà tedia2sql hỗ trợ, hãy gõ lệnh tedia2sql –help. Một số nền CSDL phổ dụng là: postgres, mysql, sybase, oracle, db2, và innodb. Nhấn OK để đóng hộp thoại Thuộc tính. Bên trong hộp Small Package, ta nhập các kiểu tùy chọn của CSDL đó. Ví dụ, ta sẽ tạo một kiểu dữ liệu tùy chọn với tên “identity”. Khi tạo tệp lệnh SQL từ sơ đồ, tedia2sql sẽ thay thế kiểu dữ liệu này với kiểu dữ liệu ta định nghĩa trong hộp Small Package. Dưới đây là một số ví dụ:
MySQL typemaps
identity: int unsigned auto_increment bigid: bigint unsigned auto_increment |
Apache Derby typemaps
identity: int generated by default as identity bigid: long generated by default as identity |
Thực hiện lại việc cấu hình Small Package cho Apache Derby dùng Stereotype “db2: typemap”. Giờ ta đã định nghĩa xong các kiểu dữ liệu tự chọn. Ta có thể thay đổi kiểu dữ liệu của trường employee_id từ “int” thành “identity”. Sơ đồ của ta giờ có dạng như hình vẽ bên dưới:

Cuối cùng, ta sẽ dùng tedia2sql để tạo CSDL tương ứng từ sơ đồ cho nền CSDL MySQL và Apache derby. Tuy nhiên, trước khi chạy tedia2sql, ta phải vá lại chương trình này, để sửa lại lỗi định dạng lệnh SQL của tedia2sql để hỗ trợ các ánh xạ kiểu. Sửa lại văn lệnh tedia2sql (/usr/bin/tedia2sql) và chú thích lại các dòng trong hàm parseTypeMap(..) sau:
$defStr =~ s/s//g; # ignore spaces -- thành -- # $defStr =~ s/s//g; # ignore spaces
Giờ ta có thể tạo CSDL mình cần:
$ tedia2sql -i employee.dia -o employee-mysql.sql -t mysql -d $ tedia2sql -i employee.dia -o employee-derby.sql -t db2 -d
Hai lệnh trên sẽ tạo 2 tệp SQL ứng với nền MySQL và Apache derby. Nếu bạn xem các tệp tin này, bạn sẽ thấy tedia2sql xử lý các ánh xạ kiểu như thế nào:
MySQL
-- employee create table employee ( employee_id int unsigned auto_increment not null, department_id int not null, first_name varchar(255) not null, last_name varchar(255), start_date date, constraint pk_Employee primary key (employee_id) ) ;
Apache Derby
-- employee create table employee ( employee_id int generated by default as identity not null, department_id int not null, first_name varchar(255) not null, last_name varchar(255), start_date date, constraint pk_Employee primary key (employee_id) ) ;
Các tập tin trong ví dụ trên:
Ta có thể chạy thử các tệp SQL được tạo bởi tedia2sql và tạo CSDL employee như sau:
MySQL
$ mysql -u user -p dbname < employee-mysql.sql
Apache Derby
$ java -cp derby.jar:derbytools.jar \ -Dderby.system.home=/path/to/dbroot \ -Dij.protocol=jdbc:derby: \ -Dij.database='employee;create=true' org.apache.derby.tools.ij employee-derby.sql
Đối với các dự án cỡ trung và nhỏ, việc tạo CSDL bằng Dia và tạo tệp SQL thông qua tedia2sql thực sự giúp bạn tiết kiệm không ít thời gian. Bạn có thể xuất trực tiếp sơ đồ thành ảnh jpg, png, eps, tiff, pdf để trình bày với các thành viên khác trong nhóm. Ngoài ra, tedia2sql còn hỗ trợ rất nhiều tính năng, như đánh chỉ mục, khóa ngoại lai, views v..v… Xin xem thêm: hướng dẫn sử dụng tedia2sql và Hướng dẫn Dia.
Chúc vui!
Class (Lớp) biểu diễn một bảng trong CSDL. Tên lớp chính là tên bảng trong CSDL, và các thuộc tính của lớp sẽ tương ứng với các trường trong bảng. Thuộc tính có thể là public (công), private (riêng) hay protected (được bảo vệ). Những thuộc tính được bảo vệ sẽ tương ứng với khóa chính của bảng. Ta sẽ đi sâu tìm hiểu lớp trong phần sau.
Component (Thành phần) là một đối tượng đặc biệt, cho phép ta mô tả danh sách các giá trị mặc định sẽ được chèn vào trong bảng, giống như viết các câu lệnh “insert into ..” trong tệp lệnh SQL.
Small Package (Gói nhỏ) biểu diễn một ánh xạ kiểu. Các ánh xạ kiểu được sử dụng để thêm các kiểu dữ liệu SQL một cách tùy ý, như kiểu TINYINT trong MySQL chả hạn.
leave a comment