i want to change table character set from 'utf8' to 'utf8mb4'
but each column has own character set setting(utf8)
so i need to change column character set to 'Table Default', but locking is the problem
help me to change column character set without table locking
there is over 100,000,000 rows in table
(MySQL 5.7.19 AWS RDS) how to change table column character set without locking
1.8k Views Asked by user5013462 At
1
There are 1 best solutions below
Related Questions in MYSQL
- MySQL Select Rank
- When dealing with databases, does adding a different table when we can use a simple hash a good thing?
- Push mysql database script to server using git
- Why does mysql stop using indexes when date ranges are added to the query?
- Google Maps API Re-size
- store numpy array in mysql
- Whats wrong with this query? Using ands
- MySQL-Auto increment
- show duplicate values subquery mysql
- Java Web Application Query Is Not Working
- microsoft odbc driver manager data source name not found and no default driver specified
- Setting foreign key in phpMyAdmin
- No responses from google places text search api
- Adding to MAMP database in SQL/PHP
- I want to remove certain parent- and child-divs in all my wordpress posts with php or some other script
Related Questions in COLLATION
- Char encoding and SQL in C#
- SQL Duplicate query counter needing collation
- Adding Collation to a SQL Server CTE statement
- SQL Server : RegEx ASCII removal
- Highlighting Search Results: RegEx Character Collation?
- How to set the delimiter, Postgresql
- Postgresql COPY encoding, how to?
- Save Latin characters with accents in Oracle
- Default ordering in C# vs. F#
- choosing character sets and collations for combined Latin / Cyrillic language data
- Refreshing SYS.columns after db collation change
- Unexpected Sort Behavior PHP Collator::asort for values in format YYYY-MM-DD
- Mysql convert table, collation not changing
- Customizing collator rules doesn't work
- MySQL collation query results
Related Questions in TABLE-LOCK
- Prevent parallel execution using a table lock (MySQL)
- Temporal Table and Table locks
- Hibernate - apply locks to parent tables in polymorphic queries
- mysql locking question
- Error in importing mysql database
- "SET LOCAL can only be used in transaction blocks" warning in PostgreSQL
- How do I make sure I'm not updating the same record from multiple processes? Do I need table locks?
- Catch table lock exception for sql anywhere ado.net
- Table lock throws exception vs table lock waits for end
- lock issue on tables due to triggers
- locking the same table with different aliases
- Lock tables in long stored procedure in Oracle
- Is this insert safe?
- Mysql - Table lock error
- innodb full table lock during simple insert
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
"Character set" is the encoding of the characters in bytes.
"Collation" is how to sort characters.
An
INDEXon aVARCHARis sorted by its collation, so changing the collation of a column requires rebuilding an index -- a non-trivial operation.The difference between utf8 and utf8mb4 is relatively minor, but I don't think MySQL (hence RDS) has made a special case of that.
ALTER TABLE t CONVERT TO utf8mb4;sounds like the operation that you desire. That requiresALGORITHM=COPY, so it is 'locking'.Look into
pt-online-schema-changeandgh-ostas a way of altering a table, even when it needs to "copy". These are essentially non-blocking. However, I do not know if they can be used with RDS. Also, because ofJOINsand other cases where one table may need to be consistent with another, those tools may not be practical.Another approach... Add another column(s); change your code to use both the old and new column(s). Meanwhile, gradually copy the old values to the new column(s); when this is finished, change your code again -- this time to use the new column(s) instead of the old. At some later date, worry about dropping the dead column(s).
Recent versions of MySQL have made significant changes in the speed of
ALTER, so be sure to study what version RDS is derived from. In 5.6,ADD COLUMNcan useALGORITHM=INPLACE; in 8.0,ALGORITHM=INSTANT. I think either of those is non-"locking" for your purposes. (DROP COLUMNis not cheap; the issues withJOINand rebuilding indexes are still up in the air.)If you try one of these techniques, I strongly recommend you build a table with at least a million rows and try out all the steps (alter add, join, recreate index, alter drop column, etc) to verify what parts are "fast enough" and/or "non-locking".